1. 程式人生 > 其它 >API(日期時間)

API(日期時間)

 

 

日期時間:

  • 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         long
time = 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是一個列舉類。