java的Calendar和Date類
阿新 • • 發佈:2019-02-11
在JDK1.0中,Date類是唯一的一個代表時間的類,但是由於Date類不便於實現國際化,所以從JDK1.1版本開始,推薦使用Calendar類進行時間和日期處理。下面通過程式簡單介紹下:
public class DateTest { public static void main(String[] args) { //用new Date的方式輸出現在時間 String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date()); System.out.println(str); //用Calendar類的方法輸出現在的時間 Calendar calendar=Calendar.getInstance(); String s=(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")).format(calendar.getTime()); System.out.println(s); //取得Calendar中的年,用同樣的方法可以取得月日和具體的時分秒 int year=calendar.get(Calendar.YEAR); System.out.println("[1]the year is:"+ year); //Calendar類提供了一組方法用來取得今天是這年,這個月,這周的第幾天 int TheDayOfMonth=calendar.get(Calendar.DAY_OF_MONTH); System.out.println("[2]the day of month is:"+TheDayOfMonth); //現在是這個月的的幾周 int TheWeekOfMonth=calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH); System.out.println("[3]the week of month is:"+TheWeekOfMonth); //將時間改為3天后的這個時候,同樣可以改年份,月份,和具體的時分秒,如果是改到現在時間之前的某個時間,則用負數 calendar.add(Calendar.DATE, 3); int ThreeDayAfter=calendar.get(Calendar.DATE); System.out.println("[4]3 days later is:"+ThreeDayAfter); //Calendar類提供了一組方法(getTime和setTime)用於和Date類的轉換 Date d = new Date(); Calendar c6 = Calendar.getInstance(); //Calendar型別的物件轉換為Date物件 Date d1 = c6.getTime(); //Date型別的物件轉換為Calendar物件 Calendar c7 = Calendar.getInstance(); c7.setTime(d); //Calender類提供一組方法用於和相對時間的轉化 Calendar c8 = Calendar.getInstance(); long t = 1252785271098L; //將Calendar物件轉換為相對時間 long t1 = c8.getTimeInMillis(); //將相對時間轉換為Calendar物件 Calendar c9 = Calendar.getInstance(); c9.setTimeInMillis(t1); //Calendar提供了一組方法用於兩個時間的比較,before和after Calendar c4 = Calendar.getInstance(); c4.set(2009, 10 - 1, 10); Calendar c5 = Calendar.getInstance(); c5.set(2010, 10 - 1, 10); boolean b = c5.after(c4); System.out.println("[11]c5在c4後面?:"+b); //Date類的很多方法從jdk1.1開始都不推薦使用 Date date=new Date(); int DateOfYear=date.getYear(); System.out.println("[5]the date year is:"+(DateOfYear+1900)); int day=date.getDate(); System.out.println("[6]the date day is:"+day); int DateMonth=date.getMonth(); System.out.println("[7]the date month is:"+(DateMonth+1)); int DateHour=date.getHours(); System.out.println("[8]the date hour is:"+DateHour); int DateMinute=date.getMinutes(); System.out.println("[9]the date minute is:"+DateMinute); int DateSecond=date.getSeconds(); System.out.println("[10]the date hour is:"+DateSecond); } }
專案中的應用
專案要求是:要在日誌中顯示這週一到現在的登入次數。程式實現是:
然後從資料庫中查出來,統計下。。。。Date endTime=new Date(); Calendar calendar = Calendar.getInstance(); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); // 減去dayOfWeek,得到第一天的日期,因為Calendar用0-6代表一週七天,所以要減一 calendar.add(Calendar.DAY_OF_WEEK, -(dayOfWeek - 1)); calendar.set(calendar.HOUR,12); calendar.set(calendar.MINUTE,00); calendar.set(calendar.SECOND,00); Date startTime = calendar.getTime();
專案中要求用現在的時間減去使用者的出生日期得到使用者的年齡
/** *年齡是通過計算得到的取現在的日期減去出生日期 * @return */ public int getAge() { if(this.getBirthdate()==null){ return -1; } SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy"); Calendar calendar=Calendar.getInstance(); int nowYear=calendar.get(Calendar.YEAR); String dateToString=dateFormat.format(birthdate); int stringToInt=Integer.parseInt(dateToString); return nowYear-stringToInt; }
測試的方法:
@Test
public void testGetAge() throws Exception {
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=simpleDateFormat.parse("2010-01-01 00:00:00");
User user=new User();
user.setBirthdate(date);
System.out.println(user.getAge());
}
取得當前工作日的下一個工作日 /**
* 取得下一個工作日期
* 2017-11-24
* @return
*/
public static String getNextWorkdate(){
String now= new SimpleDateFormat("yyyyMMdd", Locale.getDefault()).format(new Date()).toString();
Calendar cal = Calendar.getInstance();
String pattern="yyyy-MM-dd";
Date date=null;
SimpleDateFormat dateFormat=new SimpleDateFormat(pattern);
try {
date=dateFormat.parse(now);
} catch (ParseException e) {
e.printStackTrace();
}
cal.setTime(date);
int week = cal.get(Calendar.DAY_OF_WEEK) - 1;//今天是星期幾
if(week == 5){//如果今天是星期五
cal.roll(Calendar.DAY_OF_YEAR, 3);
}else if(week == 6){
cal.roll(Calendar.DAY_OF_YEAR, 2);
}else{
cal.roll(Calendar.DAY_OF_YEAR, 1);
}
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
String dateStr = df.format(cal.getTime());
return dateStr;
}
列印報表時有個列印時間:String printTime=new SimpleDateFormat("yyyy/mm/dd HH:mm", Locale.getDefault()).format(new Date()).toString();
java語言用xftp訪問linux伺服器檔案得到檔案的修改時間(new Date()出來的格式):
/**
* 國際化的時間格式日期轉換為常見格式
* 2018-6-13
* @param StringDate
* @return
*/
public String getFormatDate(String StringDate){
String sDate="";
SimpleDateFormat sdf1 = new SimpleDateFormat ("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK);
try
{
Date date=sdf1.parse(StringDate);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sDate=sdf.format(date);
// System.out.println(sDate);
}
catch (ParseException e)
{
e.printStackTrace();
}
return sDate;
}
結尾。。。