public class X5455_ExtendedTimestamp extends Object implements ZipExtraField, Cloneable, Serializable
An extra field that stores additional file and directory timestamp data for ZIP entries. Each ZIP entry can include up to three timestamps (modify, access, create*). The timestamps are stored as 32 bit signed integers representing seconds since UNIX epoch (Jan 1st, 1970, UTC). This field improves on ZIP's default timestamp granularity, since it allows one to store additional timestamps, and, in addition, the timestamps are stored using per-second granularity (zip's default behavior can only store timestamps to the nearest even second).
Unfortunately, 32 (signed) bits can only store dates up to the year 2037, and so this extra field will eventually be obsolete. Enjoy it while it lasts!
We're using the field definition given in Info-Zip's source archive: zip-3.0.tar.gz/proginfo/extrafld.txt
Value Size Description ----- ---- ----------- 0x5455 Short tag for this extra block type ("UT") TSize Short total data size for this block Flags Byte info bits (ModTime) Long time of last modification (UTC/GMT) (AcTime) Long time of last access (UTC/GMT) (CrTime) Long time of original creation (UTC/GMT) Central-header version: Value Size Description ----- ---- ----------- 0x5455 Short tag for this extra block type ("UT") TSize Short total data size for this block Flags Byte info bits (refers to local header!) (ModTime) Long time of last modification (UTC/GMT)
Modifier and Type | Field and Description |
---|---|
static byte |
ACCESS_TIME_BIT
The bit set inside the flags by when the lasr access time is
present in this extra field.
|
static byte |
CREATE_TIME_BIT
The bit set inside the flags by when the original creation time
is present in this extra field.
|
static ZipShort |
HEADER_ID
The header ID for this extra field.
|
static byte |
MODIFY_TIME_BIT
The bit set inside the flags by when the last modification time
is present in this extra field.
|
EXTRAFIELD_HEADER_SIZE
Constructor and Description |
---|
X5455_ExtendedTimestamp()
Constructor for X5455_ExtendedTimestamp.
|
Modifier and Type | Method and Description |
---|---|
Object |
clone() |
boolean |
equals(Object o) |
FileTime |
getAccessFileTime()
Gets the access time as a
FileTime
of this ZIP entry, or null if no such timestamp exists in the ZIP entry. |
Date |
getAccessJavaTime()
Gets the access time as a java.util.Date
of this ZIP entry, or null if no such timestamp exists in the ZIP entry.
|
ZipLong |
getAccessTime()
Gets the access time (seconds since epoch) of this ZIP entry
as a ZipLong object, or null if no such timestamp exists in the
ZIP entry.
|
byte[] |
getCentralDirectoryData()
Gets the actual data to put into central directory data - without Header-ID
or length specifier.
|
ZipShort |
getCentralDirectoryLength()
Gets the length of the extra field in the local file data - without
Header-ID or length specifier.
|
FileTime |
getCreateFileTime()
Gets the create time as a
FileTime
of this ZIP entry, or null if no such timestamp exists in the ZIP entry. |
Date |
getCreateJavaTime()
Gets the create time as a java.util.Date
of this ZIP entry, or null if no such timestamp exists in the ZIP entry.
|
ZipLong |
getCreateTime()
Gets the create time (seconds since epoch) of this ZIP entry
as a ZipLong object, or null if no such timestamp exists in the
ZIP entry.
|
byte |
getFlags()
Gets flags byte.
|
ZipShort |
getHeaderId()
Gets the Header-ID.
|
byte[] |
getLocalFileDataData()
Gets the actual data to put into local file data - without Header-ID
or length specifier.
|
ZipShort |
getLocalFileDataLength()
Gets the length of the extra field in the local file data - without
Header-ID or length specifier.
|
FileTime |
getModifyFileTime()
Gets the modify time as a
FileTime
of this ZIP entry, or null if no such timestamp exists in the ZIP entry. |
Date |
getModifyJavaTime()
Gets the modify time as a java.util.Date
of this ZIP entry, or null if no such timestamp exists in the ZIP entry.
|
ZipLong |
getModifyTime()
Gets the modify time (seconds since epoch) of this ZIP entry
as a ZipLong object, or null if no such timestamp exists in the
ZIP entry.
|
int |
hashCode() |
boolean |
isBit0_modifyTimePresent()
Tests whether bit0 of the flags byte is set or not,
which should correspond to the presence or absence of
a modify timestamp in this particular ZIP entry.
|
boolean |
isBit1_accessTimePresent()
Tests whether bit1 of the flags byte is set or not,
which should correspond to the presence or absence of
a "last access" timestamp in this particular ZIP entry.
|
boolean |
isBit2_createTimePresent()
Tests whether bit2 of the flags byte is set or not,
which should correspond to the presence or absence of
a create timestamp in this particular ZIP entry.
|
void |
parseFromCentralDirectoryData(byte[] buffer,
int offset,
int length)
Doesn't do anything special since this class always uses the
same parsing logic for both central directory and local file data.
|
void |
parseFromLocalFileData(byte[] data,
int offset,
int length)
Populate data from this array as if it was in local file data.
|
void |
setAccessFileTime(FileTime time)
Sets the acccess time as a
FileTime
of this ZIP entry. |
void |
setAccessJavaTime(Date d)
Sets the access time as a java.util.Date
of this ZIP entry.
|
void |
setAccessTime(ZipLong l)
Sets the access time (seconds since epoch) of this ZIP entry
using a ZipLong object
|
void |
setCreateFileTime(FileTime time)
Sets the create time as a
FileTime
of this ZIP entry. |
void |
setCreateJavaTime(Date d)
Sets the create time as a java.util.Date
of this ZIP entry.
|
void |
setCreateTime(ZipLong l)
Sets the create time (seconds since epoch) of this ZIP entry
using a ZipLong object
|
void |
setFlags(byte flags)
Sets flags byte.
|
void |
setModifyFileTime(FileTime time)
Sets the modify time as a
FileTime
of this ZIP entry. |
void |
setModifyJavaTime(Date d)
Sets the modify time as a java.util.Date
of this ZIP entry.
|
void |
setModifyTime(ZipLong l)
Sets the modify time (seconds since epoch) of this ZIP entry
using a ZipLong object.
|
String |
toString()
Returns a String representation of this class useful for
debugging purposes.
|
public static final byte MODIFY_TIME_BIT
public static final byte ACCESS_TIME_BIT
public static final byte CREATE_TIME_BIT
public X5455_ExtendedTimestamp()
public Object clone() throws CloneNotSupportedException
clone
in class Object
CloneNotSupportedException
public FileTime getAccessFileTime()
FileTime
of this ZIP entry, or null if no such timestamp exists in the ZIP entry.
The milliseconds are always zeroed out, since the underlying data
offers only per-second precision.FileTime
or null.public Date getAccessJavaTime()
public ZipLong getAccessTime()
public byte[] getCentralDirectoryData()
getCentralDirectoryData
in interface ZipExtraField
public ZipShort getCentralDirectoryLength()
For X5455 the central length is often smaller than the local length, because central cannot contain access or create timestamps.
getCentralDirectoryLength
in interface ZipExtraField
ZipShort
for the length of the data of this extra fieldpublic FileTime getCreateFileTime()
FileTime
of this ZIP entry, or null if no such timestamp exists in the ZIP entry.
The milliseconds are always zeroed out, since the underlying data
offers only per-second precision.FileTime
or null.public Date getCreateJavaTime()
Gets the create time as a java.util.Date of this ZIP entry, or null if no such timestamp exists in the ZIP entry. The milliseconds are always zeroed out, since the underlying data offers only per-second precision.
Note: modern Linux file systems (e.g., ext2) do not appear to store a "create time" value, and so it's usually omitted altogether in the ZIP extra field. Perhaps other Unix systems track this.
public ZipLong getCreateTime()
Gets the create time (seconds since epoch) of this ZIP entry as a ZipLong object, or null if no such timestamp exists in the ZIP entry.
Note: modern Linux file systems (e.g., ext2) do not appear to store a "create time" value, and so it's usually omitted altogether in the ZIP extra field. Perhaps other Unix systems track this.
public byte getFlags()
bit0 - modify time bit1 - access time bit2 - create timeOnly first 3 bits of flags are used according to the latest version of the spec (December 2012).
public ZipShort getHeaderId()
getHeaderId
in interface ZipExtraField
public byte[] getLocalFileDataData()
getLocalFileDataData
in interface ZipExtraField
public ZipShort getLocalFileDataLength()
getLocalFileDataLength
in interface ZipExtraField
ZipShort
for the length of the data of this extra fieldpublic FileTime getModifyFileTime()
FileTime
of this ZIP entry, or null if no such timestamp exists in the ZIP entry.
The milliseconds are always zeroed out, since the underlying data
offers only per-second precision.FileTime
or null.public Date getModifyJavaTime()
public ZipLong getModifyTime()
public boolean isBit0_modifyTimePresent()
public boolean isBit1_accessTimePresent()
public boolean isBit2_createTimePresent()
public void parseFromCentralDirectoryData(byte[] buffer, int offset, int length) throws ZipException
parseFromCentralDirectoryData
in interface ZipExtraField
buffer
- the buffer to read data fromoffset
- offset into buffer to read datalength
- the length of dataZipException
- on errorpublic void parseFromLocalFileData(byte[] data, int offset, int length) throws ZipException
parseFromLocalFileData
in interface ZipExtraField
data
- an array of bytesoffset
- the start offsetlength
- the number of bytes in the array from offsetZipException
- on errorpublic void setAccessFileTime(FileTime time)
Sets the acccess time as a FileTime
of this ZIP entry. Supplied value is truncated to per-second
precision (milliseconds zeroed-out).
Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.
time
- access time as FileTime
public void setAccessJavaTime(Date d)
Sets the access time as a java.util.Date of this ZIP entry. Supplied value is truncated to per-second precision (milliseconds zeroed-out).
Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.
d
- access time as java.util.Datepublic void setAccessTime(ZipLong l)
Sets the access time (seconds since epoch) of this ZIP entry using a ZipLong object
Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.
l
- ZipLong of the access time (seconds per epoch)public void setCreateFileTime(FileTime time)
Sets the create time as a FileTime
of this ZIP entry. Supplied value is truncated to per-second
precision (milliseconds zeroed-out).
Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.
time
- create time as FileTime
public void setCreateJavaTime(Date d)
Sets the create time as a java.util.Date of this ZIP entry. Supplied value is truncated to per-second precision (milliseconds zeroed-out).
Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.
d
- create time as java.util.Datepublic void setCreateTime(ZipLong l)
Sets the create time (seconds since epoch) of this ZIP entry using a ZipLong object
Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.
l
- ZipLong of the create time (seconds per epoch)public void setFlags(byte flags)
bit0 - modify time bit1 - access time bit2 - create timeOnly first 3 bits of flags are used according to the latest version of the spec (December 2012).
flags
- flags byte indicating which of the
three datestamp fields are present.public void setModifyFileTime(FileTime time)
Sets the modify time as a FileTime
of this ZIP entry. Supplied value is truncated to per-second
precision (milliseconds zeroed-out).
Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.
time
- modify time as FileTime
public void setModifyJavaTime(Date d)
Sets the modify time as a java.util.Date of this ZIP entry. Supplied value is truncated to per-second precision (milliseconds zeroed-out).
Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.
d
- modify time as java.util.Datepublic void setModifyTime(ZipLong l)
Sets the modify time (seconds since epoch) of this ZIP entry using a ZipLong object.
Note: the setters for flags and timestamps are decoupled. Even if the timestamp is not-null, it will only be written out if the corresponding bit in the flags is also set.
l
- ZipLong of the modify time (seconds per epoch)Copyright © 2002–2022 The Apache Software Foundation. All rights reserved.