Merge "Switch from android.text.format.Time"
diff --git a/core/java/android/hardware/camera2/legacy/SurfaceTextureRenderer.java b/core/java/android/hardware/camera2/legacy/SurfaceTextureRenderer.java
index 1b28d61..a4c65ae 100644
--- a/core/java/android/hardware/camera2/legacy/SurfaceTextureRenderer.java
+++ b/core/java/android/hardware/camera2/legacy/SurfaceTextureRenderer.java
@@ -28,7 +28,6 @@
 import android.opengl.GLES11Ext;
 import android.opengl.GLES20;
 import android.opengl.Matrix;
-import android.text.format.Time;
 import android.util.Log;
 import android.util.Pair;
 import android.util.Size;
@@ -39,9 +38,14 @@
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.nio.FloatBuffer;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Locale;
 
 /**
  * A renderer class that manages the GL state, and can draw a frame into a set of output
@@ -63,6 +67,9 @@
     private static final int FLIP_TYPE_VERTICAL = 2;
     private static final int FLIP_TYPE_BOTH = FLIP_TYPE_HORIZONTAL | FLIP_TYPE_VERTICAL;
 
+    private static final DateTimeFormatter LOG_NAME_TIME_FORMATTER =
+            DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss", Locale.ROOT);
+
     private EGLDisplay mEGLDisplay = EGL14.EGL_NO_DISPLAY;
     private EGLContext mEGLContext = EGL14.EGL_NO_CONTEXT;
     private EGLConfig mConfigs;
@@ -624,9 +631,7 @@
         path.append(File.separator);
         path.append("durations_");
 
-        Time now = new Time();
-        now.setToNow();
-        path.append(now.format2445());
+        path.append(formatTimestamp(System.currentTimeMillis()));
         path.append("_S");
         for (EGLSurfaceHolder surface : mSurfaces) {
             path.append(String.format("_%d_%d", surface.width, surface.height));
@@ -639,6 +644,15 @@
         mPerfMeasurer.dumpPerformanceData(path.toString());
     }
 
+    private static String formatTimestamp(long timeMillis) {
+        // This is a replacement for {@link Time#format2445()} that doesn't suffer from Y2038
+        // issues.
+        Instant instant = Instant.ofEpochMilli(timeMillis);
+        ZoneId zoneId = ZoneId.systemDefault();
+        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zoneId);
+        return LOG_NAME_TIME_FORMATTER.format(localDateTime);
+    }
+
     private void setupGlTiming() {
         if (PerfMeasurement.isGlTimingSupported()) {
             Log.d(TAG, "Enabling GL performance measurement");