This is an automated email from the ASF dual-hosted git repository.

garydgregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-compress.git

commit 09adf7138eaaca6a29c279843b850bcbc187300b
Author: Gary Gregory <[email protected]>
AuthorDate: Sun Aug 9 18:47:36 2026 -0400

    Add and use CpioArchiveEntry.setTimeMillis(long)
    
    Use TimeUnit.MILLISECONDS.toSeconds(long).
---
 src/changes/changes.xml                                   |  1 +
 .../commons/compress/archivers/ar/ArArchiveEntry.java     |  7 ++++---
 .../commons/compress/archivers/cpio/CpioArchiveEntry.java | 15 +++++++++++++--
 .../compress/archivers/cpio/CpioArchiveOutputStream.java  |  2 +-
 .../compress/archivers/zip/X5455_ExtendedTimestamp.java   |  9 +++++----
 .../commons/compress/harmony/pack200/FileBands.java       |  3 ++-
 .../org/apache/commons/compress/archivers/CpioTest.java   |  6 +++---
 .../compress/archivers/lha/LhaArchiveInputStreamTest.java |  3 ++-
 .../archivers/tar/TarArchiveOutputStreamTest.java         |  4 +++-
 .../archivers/zip/X5455_ExtendedTimestampTest.java        |  3 ++-
 10 files changed, 36 insertions(+), 17 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 955b3500c..40688e169 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -199,6 +199,7 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="add" dev="ggregory" due-to="Gary Gregory">Add and use 
ArchiveException.requireNonNegative(long, String).</action>
       <action type="add" dev="ggregory" due-to="Gary Gregory">Add and use 
ArchiveException.requireNonNull(T, String).</action>
       <action type="add" dev="ggregory" due-to="Gary Gregory">Add and use 
CompressException.requireNonNull(Class, T, String).</action>
+      <action type="add" dev="ggregory" due-to="Gary Gregory">Add and use 
CpioArchiveEntry.setTimeMillis(long).</action>
       <!-- UPDATE -->
       <action type="update" dev="ggregory" due-to="Gary Gregory">Bump 
org.apache.commons:commons-parent from 85 to 103 #707, #752.</action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">Bump 
org.apache.commons:commons-lang3 from 3.18.0 to 3.20.0.</action>
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveEntry.java 
b/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveEntry.java
index efe95ff1d..efe49bb22 100644
--- a/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveEntry.java
+++ b/src/main/java/org/apache/commons/compress/archivers/ar/ArArchiveEntry.java
@@ -26,6 +26,7 @@
 import java.nio.file.Path;
 import java.util.Date;
 import java.util.Objects;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.compress.archivers.ArchiveEntry;
 
@@ -88,7 +89,7 @@ public class ArArchiveEntry implements ArchiveEntry {
      */
     public ArArchiveEntry(final File inputFile, final String entryName) {
         // TODO sort out mode
-        this(entryName, inputFile.isFile() ? inputFile.length() : 0, 0, 0, 
DEFAULT_MODE, inputFile.lastModified() / 1000);
+        this(entryName, inputFile.isFile() ? inputFile.length() : 0, 0, 0, 
DEFAULT_MODE, TimeUnit.MILLISECONDS.toSeconds(inputFile.lastModified()));
     }
 
     /**
@@ -102,7 +103,7 @@ public ArArchiveEntry(final File inputFile, final String 
entryName) {
      */
     public ArArchiveEntry(final Path inputPath, final String entryName, final 
LinkOption... options) throws IOException {
         this(entryName, Files.isRegularFile(inputPath, options) ? 
Files.size(inputPath) : 0, 0, 0, DEFAULT_MODE,
-                Files.getLastModifiedTime(inputPath, options).toMillis() / 
1000);
+                Files.getLastModifiedTime(inputPath, 
options).to(TimeUnit.SECONDS));
     }
 
     /**
@@ -116,7 +117,7 @@ public ArArchiveEntry(final Path inputPath, final String 
entryName, final LinkOp
      * @param length length of the entry in bytes.
      */
     public ArArchiveEntry(final String name, final long length) {
-        this(name, length, 0, 0, DEFAULT_MODE, System.currentTimeMillis() / 
1000);
+        this(name, length, 0, 0, DEFAULT_MODE, 
TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
     }
 
     /**
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
 
b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
index 2b4e6c7f2..aede81125 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
@@ -27,6 +27,7 @@
 import java.nio.file.attribute.FileTime;
 import java.util.Date;
 import java.util.Objects;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.compress.archivers.ArchiveEntry;
 import org.apache.commons.compress.archivers.ArchiveException;
@@ -294,7 +295,7 @@ public CpioArchiveEntry(final short format, final File 
inputFile, final String e
             throw new IllegalArgumentException("Cannot determine type of file 
" + inputFile.getName());
         }
         // TODO set other fields as needed
-        setTime(inputFile.lastModified() / 1000);
+        setTimeMillis(inputFile.lastModified());
     }
 
     /**
@@ -931,12 +932,22 @@ public void setTime(final FileTime time) {
     /**
      * Sets the time in seconds.
      *
-     * @param time The time to set.
+     * @param time The time to set in seconds.
      */
     public void setTime(final long time) {
         this.mtime = time;
     }
 
+    /**
+     * Sets the time in milliseconds.
+     *
+     * @param time The time to set in milliseconds.
+     * @since 1.29.0
+     */
+    public void setTimeMillis(final long time) {
+        this.mtime = TimeUnit.MILLISECONDS.toSeconds(time);
+    }
+
     /**
      * Sets the user id.
      *
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java
 
b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java
index d627e52b7..cd20b3427 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java
@@ -291,7 +291,7 @@ public void putArchiveEntry(final CpioArchiveEntry entry) 
throws IOException {
             closeArchiveEntry(); // close previous entry
         }
         if (entry.getTime() == -1) {
-            entry.setTime(System.currentTimeMillis() / 1000);
+            entry.setTimeMillis(System.currentTimeMillis());
         }
         final short format = entry.getFormat();
         if (format != this.entryFormat) {
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestamp.java
 
b/src/main/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestamp.java
index e23ad1eb3..3e6059124 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestamp.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestamp.java
@@ -23,6 +23,7 @@
 import java.util.Arrays;
 import java.util.Date;
 import java.util.Objects;
+import java.util.concurrent.TimeUnit;
 import java.util.zip.ZipException;
 
 import org.apache.commons.io.file.attribute.FileTimes;
@@ -103,14 +104,14 @@ public class X5455_ExtendedTimestamp implements 
ZipExtraField, Cloneable, Serial
      * <p/>
      * Also makes sure the converted ZipLong is not too big to fit in 32 
unsigned bits.
      *
-     * @param d java.util.Date to convert to ZipLong.
+     * @param date java.util.Date to convert to ZipLong.
      * @return ZipLong.
      */
-    private static ZipLong dateToZipLong(final Date d) {
-        if (d == null) {
+    private static ZipLong dateToZipLong(final Date date) {
+        if (date == null) {
             return null;
         }
-        return unixTimeToZipLong(d.getTime() / 1000);
+        return 
unixTimeToZipLong(TimeUnit.MILLISECONDS.toSeconds(date.getTime()));
     }
 
     /**
diff --git 
a/src/main/java/org/apache/commons/compress/harmony/pack200/FileBands.java 
b/src/main/java/org/apache/commons/compress/harmony/pack200/FileBands.java
index 5a2e1efe9..b9adaeec1 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/FileBands.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/FileBands.java
@@ -25,6 +25,7 @@
 import java.util.List;
 import java.util.Set;
 import java.util.TimeZone;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.compress.harmony.pack200.Archive.PackingFile;
 import org.apache.commons.compress.harmony.pack200.Archive.SegmentUnit;
@@ -101,7 +102,7 @@ public FileBands(final CpBands cpBands, final SegmentHeader 
segmentHeader, final
             file_size[i] = bytes.length;
             totalSize = Pack200Exception.addExact(totalSize, file_size[i]);
             // update modification time
-            modtime = (packingFile.getModtime() + 
TimeZone.getDefault().getRawOffset()) / 1000L;
+            modtime = TimeUnit.MILLISECONDS.toSeconds(packingFile.getModtime() 
+ TimeZone.getDefault().getRawOffset());
             file_modtime[i] = (int) (modtime - archiveModtime);
             if (isLatest && latestModtime < file_modtime[i]) {
                 latestModtime = file_modtime[i];
diff --git a/src/test/java/org/apache/commons/compress/archivers/CpioTest.java 
b/src/test/java/org/apache/commons/compress/archivers/CpioTest.java
index 72efa86a8..716330fa9 100644
--- a/src/test/java/org/apache/commons/compress/archivers/CpioTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/CpioTest.java
@@ -138,7 +138,7 @@ void testExplicitDirectoryEntry() throws Exception {
         try (CpioArchiveOutputStream tos = new 
CpioArchiveOutputStream(Files.newOutputStream(archive.toPath()))) {
             beforeArchiveWrite = getTempDirFile().lastModified();
             final CpioArchiveEntry in = new CpioArchiveEntry("foo/");
-            in.setTime(beforeArchiveWrite / 1000);
+            in.setTimeMillis(beforeArchiveWrite);
             in.setMode(CpioConstants.C_ISDIR);
             tos.putArchiveEntry(in);
             tos.closeArchiveEntry();
@@ -160,7 +160,7 @@ void testExplicitFileEntry() throws Exception {
         final File archive = createTempFile("test.", ".cpio");
         try (CpioArchiveOutputStream tos = new 
CpioArchiveOutputStream(Files.newOutputStream(archive.toPath()))) {
             final CpioArchiveEntry in = new CpioArchiveEntry("foo");
-            in.setTime(tmp.lastModified() / 1000);
+            in.setTimeMillis(tmp.lastModified());
             in.setSize(tmp.length());
             in.setMode(CpioConstants.C_ISREG);
             tos.putArchiveEntry(in);
@@ -211,7 +211,7 @@ void testSymbolicLinkFileEntry() throws Exception {
         final Charset charset = StandardCharsets.UTF_8;
         try (CpioArchiveOutputStream tos = new 
CpioArchiveOutputStream(Files.newOutputStream(archive.toPath()))) {
             final CpioArchiveEntry entry = new CpioArchiveEntry(name);
-            entry.setTime(tmp.lastModified() / 1000);
+            entry.setTimeMillis(tmp.lastModified());
             entry.setSize(nameLink.length());
             entry.setMode(CpioConstants.C_ISLNK);
             assertTrue(entry.isSymbolicLink());
diff --git 
a/src/test/java/org/apache/commons/compress/archivers/lha/LhaArchiveInputStreamTest.java
 
b/src/test/java/org/apache/commons/compress/archivers/lha/LhaArchiveInputStreamTest.java
index 2b25da5fb..56ef47c23 100644
--- 
a/src/test/java/org/apache/commons/compress/archivers/lha/LhaArchiveInputStreamTest.java
+++ 
b/src/test/java/org/apache/commons/compress/archivers/lha/LhaArchiveInputStreamTest.java
@@ -40,6 +40,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.compress.AbstractTest;
 import org.apache.commons.compress.archivers.ArchiveException;
@@ -633,7 +634,7 @@ void testParseExtendedHeaderUnixTimestamp() throws 
IOException {
             // Valid
             final LhaArchiveEntry.Builder entryBuilder = 
LhaArchiveEntry.builder();
             archive.parseExtendedHeader(toByteBuffer(0x54, 0x5c, 0x73, 0x9c, 
0x68, 0x00, 0x00), entryBuilder);
-            assertEquals(0x689c735cL, 
entryBuilder.get().getLastModifiedDate().getTime() / 1000);
+            assertEquals(0x689c735cL, 
TimeUnit.MILLISECONDS.toSeconds(entryBuilder.get().getLastModifiedDate().getTime()));
             // Invalid length
             try {
                 archive.parseExtendedHeader(toByteBuffer(0x54, 0x5c, 0x73, 
0x9c, 0x00, 0x00), entryBuilder);
diff --git 
a/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStreamTest.java
 
b/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStreamTest.java
index 137f9eb1e..38097564f 100644
--- 
a/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStreamTest.java
+++ 
b/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStreamTest.java
@@ -41,6 +41,7 @@
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.compress.AbstractTest;
 import org.apache.commons.compress.archivers.ArchiveEntry;
@@ -212,7 +213,8 @@ void testLongNameMd5Hash() throws Exception {
             final ArchiveEntry nextEntry = tarIn.getNextEntry();
             assertEquals(longFileName, nextEntry.getName());
             // tar archive stores modification time to second granularity only 
(floored)
-            assertEquals(modificationDate.getTime() / 1000, 
nextEntry.getLastModifiedDate().getTime() / 1000);
+            
assertEquals(TimeUnit.MILLISECONDS.toSeconds(modificationDate.getTime()),
+                    
TimeUnit.MILLISECONDS.toSeconds(nextEntry.getLastModifiedDate().getTime()));
         }
     }
 
diff --git 
a/src/test/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestampTest.java
 
b/src/test/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestampTest.java
index a25017642..c329087bb 100644
--- 
a/src/test/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestampTest.java
+++ 
b/src/test/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestampTest.java
@@ -40,6 +40,7 @@
 import java.util.Date;
 import java.util.Enumeration;
 import java.util.TimeZone;
+import java.util.concurrent.TimeUnit;
 import java.util.zip.ZipException;
 
 import org.apache.commons.compress.AbstractTest;
@@ -193,7 +194,7 @@ void testGettersSetters() {
         cal.set(Calendar.SECOND, 0);
         cal.set(Calendar.MILLISECOND, 0);
         final long timeMillis = cal.getTimeInMillis();
-        final ZipLong time = new ZipLong(timeMillis / 1000);
+        final ZipLong time = new 
ZipLong(TimeUnit.MILLISECONDS.toSeconds(timeMillis));
 
         // set too big
         // Java time is 1000 x larger (milliseconds).

Reply via email to