]> source.dussan.org Git - sonarqube.git/commitdiff
Use thread safe date time API
authorZipeng WU <zipeng.wu@sonarsource.com>
Fri, 11 Dec 2020 08:29:48 +0000 (09:29 +0100)
committersonartech <sonartech@sonarsource.com>
Mon, 14 Dec 2020 20:07:14 +0000 (20:07 +0000)
sonar-core/src/main/java/org/sonar/core/util/UtcDateUtils.java

index b1aaa8162075d877a4621f855591fc9914a1797c..5c955ee5886d0b634fb348fa5205b5925057c116 100644 (file)
  */
 package org.sonar.core.util;
 
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
+import java.time.OffsetDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
 import java.util.Date;
-import java.util.TimeZone;
-
 import org.sonar.api.utils.DateUtils;
 
 public class UtcDateUtils {
 
-  private static final ThreadLocal<DateFormat> format =
-    ThreadLocal.withInitial(() -> {
-      DateFormat f = new SimpleDateFormat(DateUtils.DATETIME_FORMAT);
-      f.setTimeZone(TimeZone.getTimeZone("UTC"));
-      return f;
-    });
+  private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DateUtils.DATETIME_FORMAT).withZone(ZoneOffset.UTC);
 
   private UtcDateUtils() {
     // only static stuff
   }
 
   public static String formatDateTime(Date date) {
-    return format.get().format(date);
+    return formatter.format(date.toInstant());
   }
 
   public static Date parseDateTime(String s) {
     try {
-      return format.get().parse(s);
-    } catch (ParseException e) {
+      return Date.from(OffsetDateTime.parse(s, formatter).toInstant());
+    } catch (DateTimeParseException e) {
       throw new IllegalArgumentException("Fail to parse date: " + s, e);
     }
   }