java8之前,我對于java提供的時間工具類,覺得很麻煩。因此我偏向使用appache或者google提供的一些工具包。但java8,為我們重新提供時間工具類。這次所提供的類都在Time包中,而這其中最值得的我們去了解的類有五個。
- Instant 它代表的是時間戳,比如2014-01-14T02:20:13.592Z,這可以從java.time.Clock類中獲取,像這樣:
Instant current = Clock.system(ZoneId.of(“Asia/Tokyo”)).instant();
- LocalDate 它表示的是不帶時間的日期,比如2014-01-14。它可以用來存儲生日,周年紀念日,入職日期等。
- LocalTime – 它表示的是不帶日期的時間
- LocalDateTime – 它包含了時間與日期,不過沒有帶時區的偏移量
- ZonedDateTime – 這是一個帶時區的完整時間,它根據UTC/格林威治時間來進行時區調整
注:這次新的日期和時間工具類都不可變的也是線程安全的。
代碼就是最好的文檔,具體使用如下
// 獲取當前日期
LocalDate ld = LocalDate.now();
System.out.println(ld);
// 輸出結果:2017-03-20
// 獲取當前的年月日
int year = ld.getYear();
int month = ld.getMonthValue();
int day = ld.getDayOfMonth();
System.out.println("年:" + year + "月:" + month + "日:" + day);
// 輸出結果:年:2017月:3日:20
// 獲取指定日期
LocalDate lcl = LocalDate.of(2020, 2, 5);
System.out.println(lcl);
// 輸出結果:2020-02-05 ,這比我們自己拼接字符串可太爽了^_^
// 獲取指定時間,具體到毫秒
LocalDateTime lct = LocalDateTime.now();
System.out.println(lct);
// 輸出結果:2017-03-20T15:38:32.264
// 指定具體時間
LocalDateTime lct1 = LocalDateTime.of(1998, 3, 4, 14, 33);
System.out.println(lct1);
// 輸出結果:1998-03-04T14:33
// 判斷兩個日期是否相等
LocalDate lld1 = LocalDate.now();
LocalDate lld2 = LocalDate.of(2017, 3, 20);
if (lld1.equals(lld2)) {
System.out.println("日期相等");
}
// 輸出結果:日期相等
// 判斷是不是生日,比如以我的生日舉例聲明
LocalDate ldt = LocalDate.of(1994, 10, 07);
LocalDate ldt1 = LocalDate.of(2020, 10, 07);
MonthDay md = MonthDay.of(ldt.getMonth(), ldt.getDayOfMonth());
MonthDay md1 = MonthDay.of(ldt1.getMonth(), ldt1.getDayOfMonth());
if (md.equals(md1)) {
System.out.println("zhaotong 生日快樂");
}
// 輸出結果:zhaotong 生日快樂
// 從當前時間,向前或向后擴展
LocalDate lde = LocalDate.now();
LocalDate lde1 = lde.plusDays(5);// 向后數五天
System.out.println(lde1);// 2017-03-25
LocalDate lde2 = lde.minusDays(5);// 向前數五天
System.out.println(lde2);// 2017-03-15
LocalDate lde3 = lde.minusWeeks(2);// 向前數兩周
System.out.println(lde3);// 2017-03-06
// LocalDateTime 也擁有這些擴展函數,這里就不在一一說明了
// java 8中的時鐘
Clock clock = Clock.systemUTC();
Clock clock1 = Clock.systemDefaultZone();
System.out.println(clock);
System.out.println(clock1);
// 輸出結果:SystemClock[Z],SystemClock[Asia/Shanghai]
// 判斷一個日期是在另一個日期前面還是后面
LocalDate today = LocalDate.now();
LocalDate tomorrow = LocalDate.of(2017, 3, 21);
if (today.isBefore(tomorrow)) {
System.out.println(true);
}
if (tomorrow.isAfter(today)) {
System.out.println(true);
}
// java8 中處理不同的時區
LocalDateTime ldtc = LocalDateTime.now();
ZonedDateTime ldtczone = ZonedDateTime.of(ldtc,
ZoneId.of("America/New_York"));
System.out.println(ldtczone);
// 輸出:2017-03-20T17:35:56.257-04:00[America/New_York]
// java中如何表示固定的日期
YearMonth ym = YearMonth.of(2008, Month.FEBRUARY);
System.out.println(ym.lengthOfMonth());// 2008年的2月是29天
// 判斷是否為閏年
LocalDate date = LocalDate.now();
if (date.isLeapYear()) {
System.out.println(date + ":" + "是閏年");
}
// 獲取兩個日期之間的數據
LocalDate date1 = LocalDate.of(2000, 10, 07);
Period per = Period.between(date1, date);
System.out.println("days:" + per.getDays());
System.out.println("years:" + per.getYears());
System.out.println("months:" + per.getMonths());
// days:13
// years:16
// months:5
// 相差16年,5個月,13天
// java 8獲取當前時間戳
Instant is = Instant.now();
System.out.println(is);
// 輸出:2017-03-20T09:53:59.433Z
// 格式化輸出日期
String goodFriday = "1994-10-07";
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate holiday = LocalDate.parse(goodFriday, formatter);
System.out.println(holiday);
} catch (DateTimeParseException ex) {
ex.printStackTrace();
}
//將日期格式化,轉化成字符串
LocalDateTime ldtt=LocalDateTime.now();
DateTimeFormatter format=DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:a");
String str=ldtt.format(format);
System.out.println(str);
//輸出結果:2017-03-20 06:03:下午