在JAVA中有六個與時間有關(guān)的類:
1. java.util.Date
2. java.sql.Date
3. java.sql.Time
4. java.sql.Timestamp
5. java.text.SimpleDateFormat
6. java.util.Calendar
常用時間設(shè)置類
java.util.Date
java.util.Date 是java.sqlDate,Time,Timestamp的父類,Java中的時間使用標(biāo)準(zhǔn)類庫的java.util.Date,其表示特定的瞬間逮诲,精確到毫秒燎悍。是用距離一個固定時間點(diǎn)的毫秒數(shù)(可正可負(fù)赁酝,long類型)表達(dá)一個特定的時間點(diǎn)葵姥。從 JDK 1.1 開始,應(yīng)該使用 Calendar 類實現(xiàn)日期和時間字段之間轉(zhuǎn)換,使用 DateFormat 類來格式化和分析日期字符串琅豆。因為Date的設(shè)計具有"千年蟲"以及"時區(qū)"的問題愉豺,所以Date中的大部分方法已經(jīng)不建議使用了,它們都被java.util.Calendar類所取代
java.text.DateFormat(抽象類)
DateFormat 是日期/時間格式化子類的抽象類茫因,它以與語言無關(guān)的方式格式化并分析日期或時間蚪拦。日期/時間格式化子類(如 SimpleDateFormat)允許進(jìn)行格式化(日期 -> 文本)、分析(文本-> 日期)和標(biāo)準(zhǔn)化冻押。將日期表示為 Date 對象驰贷,或者表示為從 GMT(格林尼治標(biāo)準(zhǔn)時間)1970 年1 月 1 日 00:00:00 這一刻開始的毫秒數(shù)。 不過DateFormat的格式化Date的功能有限翼雀,沒有SimpleDateFormat強(qiáng)大饱苟;但DateFormat是SimpleDateFormat的父類。
java.text.SimpleDateFormat (DateFormat的直接子類)
SimpleDateFormat 是一個以與語言環(huán)境相關(guān)的方式來格式化和分析日期的具體類狼渊。
SimpleDateFormat 使得可以選擇任何用戶定義的日期-時間格式的模式箱熬。但是,仍然建議通過 DateFormat 中的 getTimeInstance狈邑、getDateInstance 或 getDateTimeInstance 來新的創(chuàng)建日期-時間格式化程序城须。
日期格式字符串如下:
(4)、java.util.Calendar(抽象類)
java.util.Calendar 類用于封裝日歷信息米苹,其主要作用在于其方法可以對時間分量進(jìn)行運(yùn)算糕伐。
Calendar 類是一個抽象類,它為特定瞬間與一組諸如 YEAR蘸嘶、MONTH良瞧、DAY_OF_MONTH、HOUR 等日歷字段之間的轉(zhuǎn)換提供了一些方法训唱,并為操作日歷字段(例如獲得下星期的日期)提供了一些方法褥蚯。瞬間可用毫秒值來表示,它是距歷元(即格林威治標(biāo)準(zhǔn)時間 1970 年 1 月 1 日的 00:00:00.000况增,格里高利歷)的偏移量赞庶。
與其他語言環(huán)境敏感類一樣,Calendar 提供了一個類方法 getInstance澳骤,以獲得此類型的一個通用的對象歧强。Calendar 的 getInstance 方法返回一個 Calendar 對象,其日歷字段已由當(dāng)前日期和時間初始化为肮。
常用代碼
日期轉(zhuǎn)字符串摊册、字符串轉(zhuǎn)日期
/*
*日期轉(zhuǎn)字符串、字符串轉(zhuǎn)日期
*/
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//設(shè)置為東八區(qū)
dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
try {
//1颊艳、日期轉(zhuǎn)字符串
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
String dateStringParse = dateFormat.format(date);
System.out.println(dateStringParse);
//2茅特、字符串轉(zhuǎn)日期
String dateString = "2021-01-07 16:53:08";
Date dateParse = dateFormat.parse(dateString);
System.out.println(dateParse);
} catch (ParseException e) {
e.printStackTrace();
}
獲取時間戳
Date date = new Date();
System.out.println(date.getTime());
獲取帶周的時間格式
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1 = df.parse("2017-12-20 12:19:19");
//指定日期
Calendar cal = df.getCalendar();
//當(dāng)前時間
Calendar cas = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);//獲取年份
int month=cal.get(Calendar.MONTH);//獲取月份
int day=cal.get(Calendar.DATE);//獲取日
int hour=cal.get(Calendar.HOUR);//小時
int minute=cal.get(Calendar.MINUTE);//分
int second=cal.get(Calendar.SECOND);//秒
int WeekOfYear = cal.get(Calendar.DAY_OF_WEEK);//一周的第幾天
System.out.println("現(xiàn)在的時間是:公元"+year+"年"+month+"月"+day+"日 "+hour+"時"+minute+"分"+second+"秒 星期"+WeekOfYear);
獲取當(dāng)前時間顯示蟆沫,上午,下午
Date date = new Date();
DateFormat df1 = DateFormat.getDateInstance();//日期格式温治,精確到日
System.out.println(df1.format(date));
DateFormat df2 = DateFormat.getDateTimeInstance();//可以精確到時分秒
System.out.println(df2.format(date));
DateFormat df3 = DateFormat.getTimeInstance();//只顯示出時分秒
System.out.println("只顯示出時分秒:"+df3.format(date));
DateFormat df4 = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL); //顯示日期,周戒悠,上下午熬荆,時間(精確到秒)
System.out.println("顯示日期,周绸狐,上下午卤恳,時間(精確到秒):"+df4.format(date));
DateFormat df5 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG); //顯示日期,上下午,時間(精確到秒)
System.out.println("顯示日期,上下午寒矿,時間(精確到秒):"+df5.format(date));
DateFormat df6 = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT); //顯示日期突琳,上下午,時間(精確到分)
System.out.println("顯示日期,上下午,時間(精確到分):"+df6.format(date));
DateFormat df7 = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM); //顯示日期符相,時間(精確到分)
System.out.println("顯示日期拆融,時間(精確到分):"+df7.format(date));
兩個日期相差多少小時,分鐘啊终,毫秒
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1 = df.parse("2017-12-20 12:19:19");
Date d2 = df.parse("2017-12-20 11:40:34");
long nd = 1000 * 24 * 60 * 60;
long nh = 1000 * 60 * 60;
long nm = 1000 * 60;
long ns = 1000;
// 獲得兩個時間的毫秒時間差異
long diff = d1.getTime() - d2.getTime();
// 計算差多少天
long day = diff / nd;
// 計算差多少小時
long hour = diff % nd / nh;
// 計算差多少分鐘
long min = diff % nd % nh / nm;
// 計算差多少秒//輸出結(jié)果
long sec = diff % nd % nh % nm / ns;
System.out.println(day + "天" + hour + "小時" + min + "分鐘"+ sec + "秒");