Java8的DateTimeFormatter與SimpleDateFormat的區別詳解
兩者最大的區別是,Java8的DateTimeFormatter是線程安全的,而SimpleDateFormat並不是線程安全。
package com.main; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Date; public class Main { public static void main(String args[]){ //解析日期 String dateStr= "2016年10月25日"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日"); LocalDate date= LocalDate.parse(dateStr, formatter); //日期轉換為字符串 LocalDateTime now = LocalDateTime.now(); DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy年MM月dd日 hh:mm a"); String nowStr = now .format(format); System.out.println(nowStr); //ThreadLocal來限制SimpleDateFormat System.out.println(format(new Date())); } //要在高並發環境下能有比較好的體驗,可以使用ThreadLocal來限制SimpleDateFormat隻能在線程內共享,這樣就避免瞭多線程導致的線程安全問題。 private static ThreadLocal<DateFormat> threadLocal = new ThreadLocal<DateFormat>() { @Override protected DateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } }; public static String format(Date date) { return threadLocal.get().format(date); } }
Java8 (LocalDateTime) 時間轉換
註意:LocalDateTime是帶時分秒的
1.將LocalDateTime轉為自定義的時間格式的字符串
public static String getDateTimeAsString(LocalDateTime localDateTime, String format) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); return localDateTime.format(formatter); }
2.將long類型的timestamp轉為LocalDateTime
public static LocalDateTime getDateTimeOfTimestamp(long timestamp) { Instant instant = Instant.ofEpochMilli(timestamp); ZoneId zone = ZoneId.systemDefault(); return LocalDateTime.ofInstant(instant, zone); }
3.將LocalDateTime轉為long類型的timestamp
public static long getTimestampOfDateTime(LocalDateTime localDateTime) { ZoneId zone = ZoneId.systemDefault(); Instant instant = localDateTime.atZone(zone).toInstant(); return instant.toEpochMilli(); }
4.將某時間字符串轉為自定義時間格式的LocalDateTime
public static LocalDateTime parseStringToDateTime(String time, String format) { DateTimeFormatter df = DateTimeFormatter.ofPattern(format); return LocalDateTime.parse(time, df); }
到此這篇關於Java8的DateTimeFormatter與SimpleDateFormat的區別詳解的文章就介紹到這瞭,更多相關Java8 DateTimeFormatter與SimpleDateFormat內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java技能點之SimpleDateFormat進行日期格式化問題
- 詳解Java關於JDK中時間日期的API
- Java LocalDateTime常用操作方法
- 一篇文章弄懂Java8中的時間處理
- SpringBoot如何根據用戶系統時區動態展示時間