ソースを参照

添加 geSimpleDateFormat(String)

James 5 年 前
コミット
49b7377e92
1 ファイル変更20 行追加4 行削除
  1. 20 4
      src/main/java/com/jfinal/kit/TimeKit.java

+ 20 - 4
src/main/java/com/jfinal/kit/TimeKit.java

@@ -17,6 +17,7 @@
 package com.jfinal.kit;
 
 import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -25,6 +26,7 @@ import java.time.ZoneId;
 import java.time.chrono.ChronoLocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.Map;
 import com.jfinal.kit.SyncWriteMap;
 
@@ -41,12 +43,11 @@ import com.jfinal.kit.SyncWriteMap;
  */
 public class TimeKit {
 	
-	private static final Map<String, DateTimeFormatter> formaters = new SyncWriteMap<>();
-	
 	/**
-	 * 缓存共享线程安全的 DateTimeFormatter
-	 * 不能缓存 "非线程安全" 的 SimpleDateFormat,除非配合 ThreadLocal 来缓存
+	 * 缓存线程安全的 DateTimeFormatter
 	 */
+	private static final Map<String, DateTimeFormatter> formaters = new SyncWriteMap<>();
+	
 	public static DateTimeFormatter getFormatter(String pattern) {
 		DateTimeFormatter ret = formaters.get(pattern);
 		if (ret == null) {
@@ -57,6 +58,21 @@ public class TimeKit {
 	}
 	
 	/**
+	 * 结合 ThreadLocal 缓存 "非线程安全" 的 SimpleDateFormat
+	 */
+	private static final ThreadLocal<HashMap<String, SimpleDateFormat>> TL = ThreadLocal.withInitial(() -> new HashMap<>());
+	
+	public static SimpleDateFormat getSimpleDateFormat(String pattern) {
+		HashMap<String, SimpleDateFormat> map = TL.get();
+		SimpleDateFormat ret = map.get(pattern);
+		if (ret == null) {
+			ret = new SimpleDateFormat(pattern);
+			map.put(pattern, ret);
+		}
+		return ret;
+	}
+	
+	/**
 	 * 按指定 pattern 将当前时间转换成 String
 	 * 例如:now("yyyy-MM-dd HH:mm:ss")
 	 */