LocalDate、LocalDateTime和其他時間格式的轉換(JDK8)

JDK8以前,Java處理時間的方式非常繁瑣,並且有很多坑,這裏不做過多介紹。於是後面誕生了Joda Time這種優秀的日期-時間類庫,相信還有不少的在校生還在使用,因爲在2019年的校招秋招,我幫我大佬改校招試題,看到有人在簡歷中提到了Joda Time。在JDK8開始,其時間實現類就做了很多重大的改進,融入了JodaTime的優秀特性,誕生了LocalDate和LocalDateTime等時間處理類。也順帶提醒下還在校的做java開發的朋友,有用老版本的jdk還是快點升級吧,至少升個JDK8。

下面主要介紹LocalDate和LocalDateTime轉化成其他時間格式

基礎部分就不多說,請自行參閱:(英)https://docs.oracle.com/javase/8/docs/api/,(中)http://www.matools.com/api/java8

或者您有更好的實現思路歡迎指正。

 

LocalDateTime:

Long和LocalDateTime互轉

//獲取當前時間,localNowDate用作後面的舉例
LocalDateTime localNowDate = LocalDateTime.now();


/**
 * 獲取當前時間24小時前整點時間(可根據業務自行調整日期格式),統一LocalDateTime格式,後續方便根據業務自行轉化類型
 * 
 * oneDayAgoDate使用Long類型,避免自動封箱拆箱帶來的性能損耗
 */
Long oneDayAgoDate = Long.parseLong(DateTimeFormatter.ofPattern("yyyyMMddHH").format(localNowDate.plusHours(-24)));
LocalDateTime localOneDayAgoDate = LocalDateTime.parse(String.valueOf(oneDayAgoDate), DateTimeFormatter.ofPattern("yyyyMMddHH"));

LocalDateTime轉時間戳 

//將LocalDateTime轉換爲日期格式yyyyMMDDHH的long型:
long nowDate = Long.parseLong(DateTimeFormatter.ofPattern("yyyyMMddHH").format(localNowDate));

//將LocalDateTime轉化時間戳,精確到毫秒
String targetTimeStamp = localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());

 

LocalDate:

Long和LocalDate的相互轉換

//獲取當前時間,localNowDate用作後面舉例
LocalDate localNowDate = LocalDate.now();


//這兩句的作用,LocalDate有現成方法可直接替代
//注意時間格式最多隻能精確到日,如果LocalDate用yyyyMMddHH轉換會報錯
Long sevenDayAgoDate = Long.parseLong(DateTimeFormatter.ofPattern("yyyyMMdd").format(localNowDate.plusDays(-6)));
LocalDate localSevenDayAgoDate = LocalDate.parse(String.valueOf(sevenDayAgoDate), DateTimeFormatter.ofPattern("yyyyMMdd"));

LocalDate轉時間戳

//LocalDate轉化爲時間戳,精確到毫秒
String targetTimeStamp = String.valueOf(localSevenDayAgoDate.plusDays(i).atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli());

時間戳

時間戳轉LocalDate、LocalDateTime

//獲取當前時間戳,精確到毫秒
long timestamp = System.currentTimeMillis();
//時間戳轉LocalDate
LocalDate localDate = Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.ofHours(8)).toLocalDate();
//時間戳轉LocalDateTime
LocalDateTime localDateTime = Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章