java中獲取當前時間以及對當前時間操作詳解

java中時間的操作一直是自己的一個短板,希望這次總結後,會加深印象

在jdk1.0中,Date類是唯一的一個代表時間的類,但是Date類不便實現國際化,所以從JDK1.1開始,推薦使用Calendar類進行時間和日期的處理

一、獲取當前系統時間:

a)使用Date,獲取當前時間:Date date = new Date();   結果:Thu May 11 11:30:25 CST 2017

b)使用Calendar,由於Calendar類是抽象類,且Calendar類的構造方法時protected,所以無法使用Calendar類的構造方法來創建對象,API中提供了getInstance()方法來創建對象。

	public static void main(String[] args) {
		Calendar calendar = Calendar.getInstance();
		Date time = calendar.getTime();
		System.out.println(time);
		long timeInMillis = calendar.getTimeInMillis();
		System.out.println(timeInMillis);
	}
結果:
Thu May 11 18:03:00 CST 2017
1494496980905
二、關於時間格式的轉換:

取得系統的時間,轉換格式對我們來說很重要,如果需要什麼時間格式,可以用SimpleDateFormat類轉換成所需要的格式:

	public static void main(String[] args) {		
		Date date = new Date();  
        System.out.println(date);  
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
        String dateNowStr = sdf.format(date);  
        System.out.println("格式化後的日期:" + dateNowStr);
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_MONTH, 3);//正數可以得到當前時間+n天,負數可以得到當前時間-n天
        date = calendar.getTime();
        System.out.println("獲取當前時間未來的第三天:" + date);
        calendar.setTime(date);
		String time = sdf.format(date);
		System.out.println("格式化獲取當前時間未來的第三天:" + time);
	}
結果:
Thu May 11 18:15:29 CST 2017
格式化後的日期:2017-05-11
獲取當前時間未來的第三天:Sun May 14 18:15:29 CST 2017
格式化獲取當前時間未來的第三天:2017-05-14
三、關於Calendar的用法

public static void main(String[] args) {
// 直接用Date獲取當前系統時間,結果:Tue May 03 08:25:44 CST 2016
Date date = new Date();
 
 
// Date中的許多方法,例如獲取某年、某月、某日等,以及設置某年、某月、某日等都不再建議使用,
// 建議使用calendar的各種方法替代,因此便不做記錄
// 獲取指定日期的毫秒數,常用來比較兩個日期的大小。
date.getTime();
 
 
// 使用Calendar獲取當前系統時間,需要獲取Calendar對象後轉換成Date輸出
Calendar calendar = Calendar.getInstance();
 
 
// 這個方法相當於Date中的getTime,獲取當前時間的毫秒數
calendar.getTimeInMillis();
 
 
// 獲取指定日期所在周的第一天的日期,默認的一週的第一天是週日
calendar.getFirstDayOfWeek();
 
 
// 返回當前calendar日期所在的年,如2016
calendar.get(1);
 
 
// Calendar轉Date,輸出結果:Tue May 03 09:31:59 CST 2016
Date date2 = calendar.getTime();
System.out.println(date2);
 
 
// Calendar設置年、月、日,輸出結果:Mon Jun 03 09:31:59 CST 2013
// 相關常用重載方法:calendar.set(year, month, date, hourOfDay, minute);
// calendar.set(year, month, date, hourOfDay, minute, second);參數均爲int
calendar.set(2013, 5, 3);
System.out.println(calendar.getTime());
 
 
// 使用Calendar設置年,輸出結果:Fri Jun 03 09:42:43 CST 2011
calendar.set(Calendar.YEAR, 2011);
System.out.println(calendar.getTime());
 
 
// 使用Calendar和數字設置月,注意月份從0開始,代表1月,輸出結果:Mon Jan 03 09:45:32 CST 2011
calendar.set(Calendar.MONTH, 0);
System.out.println(calendar.getTime());
 
 
// 使用Calendar和自帶常量設置月,注意月份從0開始,代表1月,輸出結果:Thu Feb 03 09:47:07 CST 2011
calendar.set(Calendar.MONTH, Calendar.FEBRUARY);
System.out.println(calendar.getTime());
 
 
// 使用Calendar和數字設置日,輸出結果:Sat Feb 05 09:48:25 CST 2011
// calendar.set(Calendar.DAY_OF_MONTH, 5)結果一樣;
calendar.set(Calendar.DATE, 5);
System.out.println(calendar.getTime());
 
 
// 設置小時
calendar.set(Calendar.HOUR, 15);
System.out.println(calendar.getTime());
 
 
// 根據毫秒數設置Calendar時間
calendar.setTimeInMillis(0);
 
 
// Date轉String,輸出結果:2016-05-03 09:25:29
String forDate = dateToString(new Date());
System.out.println(forDate);
 
 
// String轉Date,輸出結果:Thu Nov 12 13:23:11 CST 2015
Date strDate = stringToDate("2015-11-12 13:23:11");
System.out.println(strDate);
 
 
// Date轉Calendar,輸出結果:2015
Calendar calendar2 = dateToCalendar(strDate);
System.out.println(calendar2.get(1));
 
 
}
 
 
/**
* 把指定的date類型時間轉換爲指定格式的字符串
* 
* @author:tuzongxun
* @Title: dateToString
* @param @param date
* @return void
* @date May 3, 2016 9:09:25 AM
* @throws
*/
static String dateToString(Date date) {
String str = "yyyy-MM-dd hh:mm:ss";
SimpleDateFormat format = new SimpleDateFormat(str);
String dateFormat = format.format(date);
return dateFormat;
}
 
 
/**
* 把指定的日期格式的字符串轉換成Date類型
* 
* @author:tuzongxun
* @Title: StringToDate
* @param @param string
* @return void
* @date May 3, 2016 9:16:38 AM
* @throws
*/
static Date stringToDate(String string) {
String str = "yyyy-MM-dd hh:mm:ss";
SimpleDateFormat format = new SimpleDateFormat(str);
Date date = new Date();
try {
date = format.parse(string);
} catch (Exception e) {
e.getStackTrace();
}
return date;
}
 
 
/**
* 把指定的date類型日期轉換成Calendar類型
* 
* @author:tuzongxun
* @Title: dateToCalendar
* @param @param date
* @return void
* @date May 3, 2016 9:13:49 AM
* @throws
*/
static Calendar dateToCalendar(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
}
Calendar在修改日期方面很有作用,比如獲取當前時間前一天:calendar.add(Calendar.DAY_OF_MONTH, -1);

四、關於SimpleDateFormat

SimpleDateFormat是java中非常常用的一個類,該類用來對日期字符串進行解析和格式化輸出,不過SimpleDateFormat和DateFormat都不是線程安全,在多線程環境下調用format()和parse()方法應該使用同步代碼來避免,詳細參考:http://blog.csdn.net/zouxucong/article/details/71742046

	public static void main(String[] args) {		
		Date date = new Date();  
        System.out.println(date);  
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");  
        String dateNowStr = sdf1.format(date);  
        System.out.println("格式化後的日期yyyy-MM-dd:" + dateNowStr);
        
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMdd");
        dateNowStr = sdf2.format(date);  
        System.out.println("格式化後的日期yyyyMMdd:" + dateNowStr);
        
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        dateNowStr = sdf3.format(date);  
        System.out.println("格式化後的日期yyyy-MM-dd HH:mm:ss:" + dateNowStr);
        
        SimpleDateFormat sdf4 = new SimpleDateFormat("yyyyMMddHHmmssSSSS");
        dateNowStr = sdf4.format(date);  
        System.out.println("格式化後的日期yyyyMMddHHmmssSSSS:" + dateNowStr);
        
        SimpleDateFormat sdf5 = new SimpleDateFormat("yyyyMMddHHmmss");
        dateNowStr = sdf5.format(date);  
        System.out.println("格式化後的日期yyyyMMddHHmmss:" + dateNowStr);
	}
結果:
Fri May 12 17:36:26 CST 2017
格式化後的日期yyyy-MM-dd:2017-05-12
格式化後的日期yyyyMMdd:20170512
格式化後的日期yyyy-MM-dd HH:mm:ss:2017-05-12 17:36:26
格式化後的日期yyyyMMddHHmmssSSSS:201705121736260499
格式化後的日期yyyyMMddHHmmss:20170512173626
先總結這麼多,以後在開發中有所學習再進行補充









發佈了70 篇原創文章 · 獲贊 222 · 訪問量 70萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章