API(日期時間)
阿新 • • 發佈:2022-05-05
日期時間:
- Date(獲取日期時間物件)
- 1、獲取當前時間:
1 //建立一個日期物件,代表此刻日期時間物件
2 Date date = new Date();
3 System.out.println("當前時間:" + date);
執行結果:
從列印結果可以看出,列印的並非date物件本身(地址),而是具體的日期時間,這就說明Date類重寫了父類的toString方法。
- 2、獲取時間毫秒值
1 //獲取時間毫秒值
2 Date date = new Date();
3 long time = date.getTime();
4 System.out.println(time);
5 System.out.println("-------方式二--------");
6 long time2 = System.currentTimeMillis();
7 System.out.println(time2);
執行結果:
兩者若有稍微時間差的原因是因為程式的執行需要消耗一定的時間
- 案例:請計算出當前時間往後走1小時121秒後的時間:
< 方法一 >
1 //1、得到當前時間毫秒值 2 longtime = System.currentTimeMillis(); 3 Date date = new Date(); 4 System.out.println(date); 5 6 //2、當前時間加上1小時121秒 7 long retTime = time + (60 * 60 + 121) * 1000; 8 //3、把最終計算得出的時間毫秒值轉換成日期物件 9 Date date2 = new Date(retTime); 10 System.out.println(date2);
執行結果:
< 方法二 >
1 long time = System.currentTimeMillis();
2 System.out.println(new Date());
3
4 time += (60 * 60 + 121) * 1000;
5 Date date = new Date();
6 date.setTime(time); //通過setTime的方式
7 System.out.println(date);
結果示例:
- SimpleDateFormat(格式化日期時間格式)
- 1、格式化日期時間物件:
1 //1、建立一個日期時間物件
2 Date date = new Date();
3 System.out.println(date);
4
5 //2、格式化改日期時間物件
6 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a"); //EEE:星期幾,a:上下午
7 //3、格式化日期時間物件成字串格式
8 String ret = sdf.format(date);
9 System.out.println(ret);
結果示例:
- 格式化時間毫秒值:
繼上述程式碼新增上一下程式碼:
1 //拓展:格式化時間毫秒值,並計算121秒之後的時間
2 long time = System.currentTimeMillis() + 121 * 1000;
3 String formatTime = sdf.format(time);
4 System.out.println(formatTime);
- 2、解析時間案例:請計算出 2021年08月06日 11:11:11,往後走2天14小時49分06秒的時間:
1 //時間:2021年08月06日 11:11:11,往後2天14小時49分06秒
2 //1、用字串儲存開始時間
3 String beginTime = "2021年08月06日 11:11:11";
4 //2、把字串時間解析成日期時間物件
5 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
6 Date date = sdf.parse(beginTime); //使用parse需要丟擲ParseException異常
7 //3、把所得日期物件轉換成時間毫秒值在加上往後走的時間
8 long time = date.getTime() + (2 * 24 * 60 * 60 + 14 * 60 * 60 + 49 * 60 + 6) * 1000L;
9 //4、格式化最終的時間毫秒值
10 String lastTime = sdf.format(time);
11 System.out.println(lastTime);
- 3、練習案例(秒殺活動):
- 需求:
- 小賈下單並付款的時間為:2020年11月11日 0:03:47
- 小皮下單並付款的時間為:2020年11月11日 0:10:11
- 用程式碼說明兩位同學有沒有成功參加秒殺活動
1 public static void main(String[] args) throws ParseException { //使用parse需要丟擲異常
2 //開始時間和結束時間
3 String beginTime = "2020年11月11日 0:00:00";
4 String endTime = "2020年11月11日 0:10:00";
5
6 //儲存兩位同學秒殺的字串時間
7 String strXiaoJia = "2020年11月11日 0:03:47";
8 String strXiaoPi = "2020年11月11日 0:10:11";
9
10 //格式化時間成日期時間物件
11 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
12 Date startTime = sdf.parse(beginTime);
13 Date lastTime = sdf.parse(endTime);
14 Date dateXiaoJia = sdf.parse(strXiaoJia);
15 Date dateXiaoPi = sdf.parse(strXiaoPi);
16
17 //判斷是否在秒殺時間內
18 if(dateXiaoJia.after(startTime) && dateXiaoJia.before(lastTime)){
19 System.out.println("小賈秒殺成功");
20 }else {
21 System.out.println("小賈秒殺失敗");
22 }
23 if(dateXiaoPi.after(startTime) && dateXiaoPi.before(lastTime)){
24 System.out.println("小皮秒殺成功");
25 }else {
26 System.out.println("小皮秒殺失敗");
27 }
28 }
- Calender
1 public static void main(String[] args) {
2 //拿到日期物件
3 Calendar calendar = Calendar.getInstance();
4 //列印calendar物件裡邊的所有資訊
5 System.out.println(calendar);
6 //通過get方法獲取日曆某一項資訊
7 System.out.println(calendar.get(Calendar.YEAR)); //年份
8 System.out.println(calendar.get(Calendar.MONTH) + 1);//月份 (0~11)
9 System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); //日
10 System.out.println(calendar.get(Calendar.SECOND));
11
12 System.out.println("-----------");
13 //修改日曆的資訊(幾乎不用)
14 // calendar.set(Calendar.YEAR,2025);
15 // System.out.println(calendar.get(Calendar.YEAR)); //年份 2025
16 //64天,56分,35秒之後是什麼時間
17 calendar.add(Calendar.DAY_OF_YEAR,63);
18 calendar.add(Calendar.MINUTE,56);
19 calendar.add(Calendar.SECOND,35);
20 System.out.println(calendar.get(Calendar.YEAR)); //年份
21 System.out.println(calendar.get(Calendar.MONTH) + 1);//月份 (0~11)
22 System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); //日
23 System.out.println(calendar.get(Calendar.SECOND)); //秒
24
25 //日曆拿到當前時間毫秒值(很少用)
26 long time = calendar.getTimeInMillis();
27 System.out.println(time);
28 }
示例結果:
- JDK8開始新增日期API(內容超多,具體使用在查詢API文件)
- localDate:
1 public static void main(String[] args) {
2 //1、獲取本地日期物件
3 LocalDate nowDate = LocalDate.now();
4 System.out.println("當前時間" + nowDate);
5 System.out.println("當前年份:" + nowDate.getYear());
6 System.out.println("當前月份(英文):" + nowDate.getMonth());
7 System.out.println("當前月份(數字):" + nowDate.getMonthValue());
8 System.out.println("-----------");
9 System.out.println("當前年份第幾天:" + nowDate.getDayOfYear());
10 System.out.println("星期(英文):" + nowDate.getDayOfWeek());
11 System.out.println("星期(數字):" + nowDate.getDayOfWeek().getValue());
12 System.out.println("月份(英文):" + nowDate.getMonth());
13 System.out.println("月份(數字):" + nowDate.getMonth().getValue());
14 System.out.println("---------------");
15 LocalDate ld = LocalDate.of(1998,12,25);
16 System.out.println("拿出指定時間:" + ld);
17 LocalDate ld2 = LocalDate.of(1998, Month.DECEMBER, 25);
18 System.out.println("設定英文月份:" + ld2);
19 }
示例結果;
- localTime :
1 public static void main(String[] args) {
2 //獲取本地日期時間物件
3 LocalTime lt = LocalTime.now();
4 System.out.println("當前系統時間:" + lt);
5 System.out.println("小時:" + lt.getHour());
6 System.out.println("分鐘:" + lt.getMinute());
7 System.out.println("秒:" + lt.getSecond());
8 System.out.println("納秒:" + lt.getNano());
9 System.out.println("------------");
10 LocalTime lt2= LocalTime.of(19,30); //指定時、分
11 System.out.println("指定時、分:" + lt2);
12 System.out.println("指定時、分、秒:" + LocalTime.of(19,30,28));
13 System.out.println("指定時、分、秒、納秒:" + LocalTime.of(19,30,28,1556));
14 }
示例結果:
- LocalDateTime(LocalDateTime綜合了LocalDate和LocalTime裡面的方法) :
1 public static void main(String[] args) {
2 //獲取當前日期時間物件
3 LocalDateTime ldt = LocalDateTime.now();
4 System.out.println("系統當前時間:" + ldt);
5 System.out.println("年份:" + ldt.getYear());
6 System.out.println("月份(英文):" + ldt.getMonth());
7 System.out.println("月份(數字):" + ldt.getMonthValue());
8 System.out.println("日:" + ldt.getDayOfMonth());
9 System.out.println("時:" + ldt.getHour());
10 System.out.println("分:" + ldt.getMinute());
11 System.out.println("秒:" + ldt.getSecond());
12 System.out.println("納秒:" + ldt.getNano());
13 System.out.println("星期幾(英文):" + ldt.getDayOfWeek());
14 System.out.println("星期幾(數字):" + ldt.getDayOfWeek().getValue());
15 System.out.println("一年中第幾天:" + ldt.getDayOfYear());
16 System.out.println("---------------");
17 LocalDate ld = ldt.toLocalDate();//轉換成LocalDate物件
18 LocalTime lt = ldt.toLocalTime();//轉換成LocalTime物件
19 }
結果示例:
- 關於修改相關的API
1 public static void main(String[] args) {
2 LocalDate lt = LocalDate.now(); //建立LocalDate物件
3 System.out.println(lt);
4 //當前時間加上2年3個月13天3周後的時間
5 LocalDate addLt = lt.plusYears(2).plusMonths(3).plusDays(15).plusWeeks(5);
6 System.out.println(addLt);
7 //當前時間減去2年3個月13天3周後的時間
8 LocalDate minusLt = lt.minusYears(2).minusMonths(3).minusDays(15).minusWeeks(5);
9 System.out.println(minusLt);
10 //將當前時間修改為2018年10月1日
11 LocalDate modifyLd = lt.withYear(2018).withMonth(10).withDayOfMonth(1);
12 System.out.println(modifyLd);
13 //比較兩個時間
14 System.out.println(lt.isAfter(minusLt));
15 System.out.println(lt.isBefore(addLt));
16 System.out.println(lt.isBefore(modifyLd));
17 System.out.println("----------------");
18 //判斷兩個日期是否相等(比較兩個日期是否相等)
19 LocalDate birthDate = LocalDate.of(1998,12,15);
20 System.out.println(birthDate.equals(lt));
21 //使用MonthDay(工具)類的of方法,從birthDate物件中通過get方法取到月份、日份
22 MonthDay md = MonthDay.of(birthDate.getMonth(),birthDate.getDayOfMonth()) ;
23 MonthDay md2 = MonthDay.from(birthDate);
24 System.out.println(md);
25 System.out.println(md2);
26 //是否為生日
27 System.out.println(md.equals(md2));
28 }
示例執行結果:
- Instant時間戳
1 public static void main(String[] args) {
2 //獲取當前時間戳物件
3 Instant instant = Instant.now();
4 System.out.println("世界標準時間:(0時區)" + instant);
5 //獲取系統此刻時間
6 Instant instantSystem = Instant.now();
7 ZonedDateTime defaultTime = instantSystem.atZone(ZoneId.systemDefault());
8 System.out.println("所在時區時間:" + defaultTime);
9 //返回Date物件
10 Date date = Date.from(instant);
11 System.out.println(date);
12 //Date物件轉成時間戳
13 Instant dti = date.toInstant();
14 System.out.println(dti);
15 }
- DateTimeFormat
1 public static void main(String[] args) {
2 LocalDateTime ldt = LocalDateTime.now();
3 System.out.println("LocalTime預設時間格式:" + ldt);
4 //建立格式化器
5 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss EEE a");
6 //<方法一>正向格式化:
7 String ret = dtf.format(ldt);
8 System.out.println("自定義日期時間格式(正向格式化):" + ret);
9 //<方法二>逆向格式化
10 String ret2 = ldt.format(dtf);
11 System.out.println("自定義日期時間格式(逆向格式化):" + ret2);
12 //解析字串時間物件
13 //建立格式化器
14 DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
15 String strTime = "2022年05月05日 11:46:04";
16 LocalDateTime strToLdt = LocalDateTime.parse(strTime,dtf2); //按照dtf2的格式格式化改字串
17 System.out.println(strToLdt);
18 }
- Period
1 public static void main(String[] args) {
2 //建立LocalDate物件
3 LocalDate ld = LocalDate.now();
4 System.out.println(ld);
5 //生日的年、月、日
6 LocalDate birthDate = LocalDate.of(2000,4,10);
7 System.out.println(birthDate);
8 Period period = Period.between(birthDate,ld); //引數二減去引數一
9 System.out.println(period);
10 System.out.println(period.getYears());
11 System.out.println(period.getMonths());
12 System.out.println(period.getDays());
13 }
- Duration
1 public static void main(String[] args) {
2 //闖將LocalDateTime時間物件,年-月-日
3 LocalDateTime ldt = LocalDateTime.now();
4 System.out.println("當前時間:" + ldt);
5 //出生日期 : 年-月-日-時-分-秒
6 LocalDateTime birthDate = LocalDateTime.of(2012,8,16,0,0,0);
7 System.out.println("自定義時間:" + birthDate);
8 //時間差
9 Duration duration = Duration.between(birthDate,ldt); //引數二減去引數一
10 System.out.println("時間差:" + duration);
11 System.out.println("時間差(天數):" + duration.toDays());
12 System.out.println("時間差(小時):" + duration.toMinutes());
13 System.out.println("時間差(秒):" + duration.toMinutes());
14 System.out.println("時間差(毫秒):" + duration.toMinutes());
15 System.out.println("時間差(納秒):" + duration.toNanos());
16 }
示例結果:
- ChronoUnit
1 public static void main(String[] args) {
2 //建立LocalDateTime時間物件:此刻
3 LocalDateTime ldt = LocalDateTime.now();
4 System.out.println("系統此刻時間:" + ldt);
5 //指定年月日時分秒
6 LocalDateTime birLdt = LocalDateTime.of(1998,3,12,14,45,36);
7 System.out.println("指定時間:" + birLdt);
8 //計算兩個日期物件時間間隔
9 System.out.println("------兩個日期物件時間間隔------");
10 Long years = ChronoUnit.YEARS.between(birLdt,ldt);
11 System.out.println("年份:" + years);
12 System.out.println("月份:" + ChronoUnit.MONTHS.between(birLdt,ldt));
13 System.out.println("週數:" + ChronoUnit.WEEKS.between(birLdt,ldt));
14 System.out.println("天數:" + ChronoUnit.DAYS.between(birLdt,ldt));
15 System.out.println("秒數:" + ChronoUnit.MILLIS.between(birLdt,ldt));
16 System.out.println("納秒數:" + ChronoUnit.NANOS.between(birLdt,ldt));
17 }
ChronoUnit工具類提供的日期時間API可謂是相當豐富的,除此之外還有半天、十年、世紀、千年、紀年等時間差,上邊也只是列出了比較可能常用的API(需要用其他的在查即可),ChronoUnit是一個列舉類。