Use a different date time when normalizing zip entries
Fixes #4614
PiperOrigin-RevId: 185474153
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/jarhelper/JarHelper.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/jarhelper/JarHelper.java
index 04a3248..719fcdb 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/jarhelper/JarHelper.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/jarhelper/JarHelper.java
@@ -18,6 +18,8 @@
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
import java.util.HashSet;
import java.util.Set;
import java.util.jar.JarEntry;
@@ -29,7 +31,7 @@
* A simple helper class for creating Jar files. All Jar entries are sorted alphabetically. Allows
* normalization of Jar entries by setting the timestamp of non-.class files to the DOS epoch.
* Timestamps of .class files are set to the DOS epoch + 2 seconds (The zip timestamp granularity)
- * Adjusting the timestamp for .class files is neccessary since otherwise javac will recompile java
+ * Adjusting the timestamp for .class files is necessary since otherwise javac will recompile java
* files if both the java file and its .class file are present.
*/
public class JarHelper {
@@ -38,7 +40,12 @@
public static final String MANIFEST_NAME = JarFile.MANIFEST_NAME;
public static final String SERVICES_DIR = "META-INF/services/";
- public static final long DOS_EPOCH_IN_JAVA_TIME = 315561600000L;
+ /** Normalize timestamps. */
+ public static final long DEFAULT_TIMESTAMP =
+ LocalDateTime.of(2010, 1, 1, 0, 0, 0)
+ .atZone(ZoneId.systemDefault())
+ .toInstant()
+ .toEpochMilli();
// ZIP timestamps have a resolution of 2 seconds.
// see http://www.info-zip.org/FAQ.html#limits
@@ -97,15 +104,15 @@
*/
private long normalizedTimestamp(String name) {
if (name.endsWith(".class")) {
- return DOS_EPOCH_IN_JAVA_TIME + MINIMUM_TIMESTAMP_INCREMENT;
+ return DEFAULT_TIMESTAMP + MINIMUM_TIMESTAMP_INCREMENT;
} else {
- return DOS_EPOCH_IN_JAVA_TIME;
+ return DEFAULT_TIMESTAMP;
}
}
/**
* Returns the time for a new Jar file entry in milliseconds since the epoch. Uses {@link
- * JarCreator#DOS_EPOCH_IN_JAVA_TIME} for normalized entries, {@link System#currentTimeMillis()}
+ * JarCreator#DEFAULT_TIMESTAMP} for normalized entries, {@link System#currentTimeMillis()}
* otherwise.
*
* @param filename The name of the file for which we are entering the time