/* * Copyright 2015-present Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. You may obtain * a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package com.facebook.buck.zip; import java.util.Calendar; public class ZipConstants { // The fake time we use: 12:00:00 AM February 1, 1985 public static final int DOS_FAKE_TIME = 172032000; private ZipConstants() {} /** * {@link java.util.zip.ZipEntry#setTime(long)} is timezone-sensitive. Use this value instead of a * hardcoded constant to produce timzeone-agnostic .zip files. * * @return time in milliseconds that represents a fixed date in the current timezone. */ public static long getFakeTime() { // Using any timestamp before 1980 (which is supposedly the earliest time supported by the .zip // format) causes files created by JRE 1.7 to be different than JRE 1.8. This is because 1.8 // actually supports setting timestamps to earlier than 1980, whereas 1.7 rounds up to 1980. // We also need to resort to the deprecated date constructor as the ZipEntry uses deprecated // Date methods that depend on the current timezone. // Finally 1980.01.01 doesn't work across all timezones across Java 1.7 and 1.8. Fun times. Calendar c = Calendar.getInstance(); c.set(1985, 1, 1, 0, 0, 0); return c.getTimeInMillis(); } }