Skip to content

Commit 2d3bd82

Browse files
committed
try at better explanation of zip time calculations
1 parent bb08ccc commit 2d3bd82

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.lang.reflect.UndeclaredThrowableException;
2323
import java.nio.charset.Charset;
2424
import java.util.ArrayList;
25-
import java.util.Calendar;
2625
import java.util.Comparator;
2726
import java.util.Date;
2827
import java.util.HashMap;

src/main/java/org/codehaus/plexus/archiver/zip/AbstractZipArchiver.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -838,10 +838,21 @@ protected String getArchiveType()
838838
@Override
839839
protected Date convertSourceDateEpochToDate( int sourceDateEpoch )
840840
{
841-
// timestamp of zip entries at zip storage level ignores timezone: see https://github.com/Stuk/jszip/issues/369
842-
Calendar cal = Calendar.getInstance();
843-
long zipTime = 1000L * sourceDateEpoch - ( cal.get( Calendar.ZONE_OFFSET ) + cal.get( Calendar.DST_OFFSET ) );
844-
return new Date( zipTime );
841+
// timestamp of zip entries at zip storage level ignores timezone: managed in ZipEntry.setTime,
842+
// that turns javaToDosTime: need to revert the operation here to get reproducible
843+
// zip entry time
844+
return new Date( dosToJavaTime( 1000L * sourceDateEpoch ) );
845845
}
846846

847+
/**
848+
* Converts DOS time to Java time (number of milliseconds since epoch).
849+
*
850+
* @see java.util.zip.ZipEntry#setTime
851+
* @see java.util.zip.ZipUtils#dosToJavaTime
852+
*/
853+
private static long dosToJavaTime( long dtime )
854+
{
855+
Calendar cal = Calendar.getInstance();
856+
return dtime - ( cal.get( Calendar.ZONE_OFFSET ) + cal.get( Calendar.DST_OFFSET ) );
857+
}
847858
}

0 commit comments

Comments
 (0)