pub struct FileTime(_);
Expand description
FileTime
is a type that represents a Windows file
time.
This is a 64-bit unsigned integer value that represents the number of 100-nanosecond intervals that have elapsed since “1601-01-01 00:00:00 UTC”.
Implementations§
source§impl FileTime
impl FileTime
sourcepub const NT_TIME_EPOCH: Self = _
pub const NT_TIME_EPOCH: Self = _
The NT time epoch.
This is defined as “1601-01-01 00:00:00 UTC”.
Examples
assert_eq!(
OffsetDateTime::try_from(FileTime::NT_TIME_EPOCH).unwrap(),
PrimitiveDateTime::new(
Date::from_calendar_date(1601, Month::January, 1).unwrap(),
Time::MIDNIGHT
)
.assume_utc()
);
sourcepub const UNIX_EPOCH: Self = _
pub const UNIX_EPOCH: Self = _
The Unix epoch.
This is defined as “1970-01-01 00:00:00 UTC”.
Examples
assert_eq!(
OffsetDateTime::try_from(FileTime::UNIX_EPOCH).unwrap(),
OffsetDateTime::UNIX_EPOCH
);
sourcepub const MAX: Self = _
pub const MAX: Self = _
The largest value that can be represented by the file time.
This is “+60056-05-28 05:36:10.955161500 UTC”.
Examples
assert_eq!(
OffsetDateTime::try_from(FileTime::MAX).unwrap(),
PrimitiveDateTime::new(
Date::from_calendar_date(60056, Month::May, 28).unwrap(),
Time::from_hms_nano(5, 36, 10, 955_161_500).unwrap()
)
.assume_utc()
);
sourcepub const fn new(time: u64) -> Self
pub const fn new(time: u64) -> Self
Creates a new FileTime
with the given file time.
Examples
assert_eq!(FileTime::new(u64::MIN), FileTime::NT_TIME_EPOCH);
assert_eq!(FileTime::new(116_444_736_000_000_000), FileTime::UNIX_EPOCH);
assert_eq!(FileTime::new(u64::MAX), FileTime::MAX);
sourcepub fn to_unix_time(self) -> i64
pub fn to_unix_time(self) -> i64
Returns Unix time represents the same date and time as this FileTime
.
Examples
assert_eq!(FileTime::NT_TIME_EPOCH.to_unix_time(), -11_644_473_600);
assert_eq!(FileTime::UNIX_EPOCH.to_unix_time(), i64::default());
assert_eq!(FileTime::MAX.to_unix_time(), 1_833_029_933_770);
sourcepub fn to_unix_time_nanos(self) -> i128
pub fn to_unix_time_nanos(self) -> i128
Returns Unix time in nanoseconds represents the same date and time as
this FileTime
.
Examples
assert_eq!(
FileTime::NT_TIME_EPOCH.to_unix_time_nanos(),
-11_644_473_600_000_000_000
);
assert_eq!(FileTime::UNIX_EPOCH.to_unix_time_nanos(), i128::default());
assert_eq!(
FileTime::MAX.to_unix_time_nanos(),
1_833_029_933_770_955_161_500
);
sourcepub fn from_unix_time(time: i64) -> Result<Self, FileTimeRangeError>
pub fn from_unix_time(time: i64) -> Result<Self, FileTimeRangeError>
Creates a FileTime
with the given Unix time.
Errors
Returns Err
if time
is out of range for the file time.
Examples
assert_eq!(
FileTime::from_unix_time(-11_644_473_600).unwrap(),
FileTime::NT_TIME_EPOCH
);
assert_eq!(
FileTime::from_unix_time(i64::default()).unwrap(),
FileTime::UNIX_EPOCH
);
assert_eq!(
FileTime::from_unix_time(1_833_029_933_770).unwrap(),
FileTime::MAX - Duration::from_nanos(955_161_500)
);
assert!(FileTime::from_unix_time(-11_644_473_601).is_err());
assert!(FileTime::from_unix_time(1_833_029_933_771).is_err());
sourcepub fn from_unix_time_nanos(time: i128) -> Result<Self, FileTimeRangeError>
pub fn from_unix_time_nanos(time: i128) -> Result<Self, FileTimeRangeError>
Creates a FileTime
with the given Unix time in nanoseconds.
Errors
Returns Err
if time
is out of range for the file time.
Examples
assert_eq!(
FileTime::from_unix_time_nanos(-11_644_473_600_000_000_000).unwrap(),
FileTime::NT_TIME_EPOCH
);
assert_eq!(
FileTime::from_unix_time_nanos(i128::default()).unwrap(),
FileTime::UNIX_EPOCH
);
assert_eq!(
FileTime::from_unix_time_nanos(1_833_029_933_770_955_161_500).unwrap(),
FileTime::MAX
);
assert!(FileTime::from_unix_time_nanos(-11_644_473_600_000_000_100).is_err());
assert!(FileTime::from_unix_time_nanos(1_833_029_933_770_955_161_501).is_err());
sourcepub fn checked_add(self, rhs: Duration) -> Option<Self>
pub fn checked_add(self, rhs: Duration) -> Option<Self>
Computes self + rhs
, returning None
if overflow occurred.
Examples
assert_eq!(
FileTime::NT_TIME_EPOCH.checked_add(Duration::from_nanos(1)),
Some(FileTime::NT_TIME_EPOCH)
);
assert_eq!(
FileTime::NT_TIME_EPOCH.checked_add(Duration::from_nanos(100)),
Some(FileTime::new(1))
);
assert_eq!(FileTime::MAX.checked_add(Duration::from_nanos(100)), None);
sourcepub fn checked_sub(self, rhs: Duration) -> Option<Self>
pub fn checked_sub(self, rhs: Duration) -> Option<Self>
Computes self - rhs
, returning None
if the result would be
negative or if overflow occurred.
Examples
assert_eq!(
FileTime::MAX.checked_sub(Duration::from_nanos(1)),
Some(FileTime::MAX)
);
assert_eq!(
FileTime::MAX.checked_sub(Duration::from_nanos(100)),
Some(FileTime::new(u64::MAX - 1))
);
assert_eq!(
FileTime::NT_TIME_EPOCH.checked_sub(Duration::from_nanos(100)),
None
);
sourcepub fn saturating_add(self, rhs: Duration) -> Self
pub fn saturating_add(self, rhs: Duration) -> Self
Computes self + rhs
, returning FileTime::MAX
if overflow occurred.
Examples
assert_eq!(
FileTime::NT_TIME_EPOCH.saturating_add(Duration::from_nanos(1)),
FileTime::NT_TIME_EPOCH
);
assert_eq!(
FileTime::NT_TIME_EPOCH.saturating_add(Duration::from_nanos(100)),
FileTime::new(1)
);
assert_eq!(
FileTime::MAX.saturating_add(Duration::from_nanos(100)),
FileTime::MAX
);
sourcepub fn saturating_sub(self, rhs: Duration) -> Self
pub fn saturating_sub(self, rhs: Duration) -> Self
Computes self - rhs
, returning FileTime::NT_TIME_EPOCH
if the
result would be negative or if overflow occurred.
Examples
assert_eq!(
FileTime::MAX.saturating_sub(Duration::from_nanos(1)),
FileTime::MAX
);
assert_eq!(
FileTime::MAX.saturating_sub(Duration::from_nanos(100)),
FileTime::new(u64::MAX - 1)
);
assert_eq!(
FileTime::NT_TIME_EPOCH.saturating_sub(Duration::from_nanos(100)),
FileTime::NT_TIME_EPOCH
);
sourcepub const fn to_be_bytes(self) -> [u8; 8]
pub const fn to_be_bytes(self) -> [u8; 8]
Returns the memory representation of this FileTime
as a byte array in
big-endian byte order.
Examples
assert_eq!(FileTime::NT_TIME_EPOCH.to_be_bytes(), [u8::MIN; 8]);
assert_eq!(
FileTime::UNIX_EPOCH.to_be_bytes(),
[0x01, 0x9d, 0xb1, 0xde, 0xd5, 0x3e, 0x80, 0x00]
);
assert_eq!(FileTime::MAX.to_be_bytes(), [u8::MAX; 8]);
sourcepub const fn to_le_bytes(self) -> [u8; 8]
pub const fn to_le_bytes(self) -> [u8; 8]
Returns the memory representation of this FileTime
as a byte array in
little-endian byte order.
Examples
assert_eq!(FileTime::NT_TIME_EPOCH.to_le_bytes(), [u8::MIN; 8]);
assert_eq!(
FileTime::UNIX_EPOCH.to_le_bytes(),
[0x00, 0x80, 0x3e, 0xd5, 0xde, 0xb1, 0x9d, 0x01]
);
assert_eq!(FileTime::MAX.to_le_bytes(), [u8::MAX; 8]);
sourcepub const fn from_be_bytes(bytes: [u8; 8]) -> Self
pub const fn from_be_bytes(bytes: [u8; 8]) -> Self
Creates a native endian FileTime
value from its representation as a
byte array in big-endian.
Examples
assert_eq!(
FileTime::from_be_bytes([u8::MIN; 8]),
FileTime::NT_TIME_EPOCH
);
assert_eq!(
FileTime::from_be_bytes([0x01, 0x9d, 0xb1, 0xde, 0xd5, 0x3e, 0x80, 0x00]),
FileTime::UNIX_EPOCH
);
assert_eq!(FileTime::from_be_bytes([u8::MAX; 8]), FileTime::MAX);
sourcepub const fn from_le_bytes(bytes: [u8; 8]) -> Self
pub const fn from_le_bytes(bytes: [u8; 8]) -> Self
Creates a native endian FileTime
value from its representation as a
byte array in little-endian.
Examples
assert_eq!(
FileTime::from_le_bytes([u8::MIN; 8]),
FileTime::NT_TIME_EPOCH
);
assert_eq!(
FileTime::from_le_bytes([0x00, 0x80, 0x3e, 0xd5, 0xde, 0xb1, 0x9d, 0x01]),
FileTime::UNIX_EPOCH
);
assert_eq!(FileTime::from_le_bytes([u8::MAX; 8]), FileTime::MAX);
Trait Implementations§
source§impl AddAssign<Duration> for FileTime
impl AddAssign<Duration> for FileTime
source§fn add_assign(&mut self, rhs: Duration)
fn add_assign(&mut self, rhs: Duration)
+=
operation. Read moresource§impl AddAssign<Duration> for FileTime
impl AddAssign<Duration> for FileTime
source§fn add_assign(&mut self, rhs: Duration)
fn add_assign(&mut self, rhs: Duration)
+=
operation. Read moresource§impl Default for FileTime
impl Default for FileTime
source§fn default() -> Self
fn default() -> Self
Returns the default value of “1601-01-01 00:00:00 UTC”.
Equivalent to FileTime::NT_TIME_EPOCH
except that it is not callable
in const contexts.
Examples
assert_eq!(FileTime::default(), FileTime::NT_TIME_EPOCH);
source§impl<'de> Deserialize<'de> for FileTime
Available on crate feature serde
only.
impl<'de> Deserialize<'de> for FileTime
serde
only.source§fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
Deserializes a FileTime
from the given Serde deserializer.
This deserializes from its underlying u64
representation.
Examples
assert_eq!(
serde_json::from_str::<FileTime>("116444736000000000").unwrap(),
FileTime::UNIX_EPOCH
);
assert_eq!(
serde_json::from_str::<Option<FileTime>>("116444736000000000").unwrap(),
Some(FileTime::UNIX_EPOCH)
);
assert_eq!(
serde_json::from_str::<Option<FileTime>>("null").unwrap(),
None
);
source§impl From<FileTime> for SystemTime
Available on crate feature std
only.
impl From<FileTime> for SystemTime
std
only.source§fn from(time: FileTime) -> Self
fn from(time: FileTime) -> Self
Converts a FileTime
to a SystemTime
.
Panics
Panics if the resulting point in time cannot be represented by the underlying OS-specific time format.
Examples
assert_eq!(
SystemTime::from(FileTime::NT_TIME_EPOCH),
SystemTime::UNIX_EPOCH - Duration::from_secs(11_644_473_600)
);
assert_eq!(
SystemTime::from(FileTime::UNIX_EPOCH),
SystemTime::UNIX_EPOCH
);
source§impl From<FileTime> for u64
impl From<FileTime> for u64
source§fn from(time: FileTime) -> Self
fn from(time: FileTime) -> Self
Converts a FileTime
to the file time.
Equivalent to FileTime::as_u64
except that it is not callable in
const contexts.
Examples
assert_eq!(u64::from(FileTime::NT_TIME_EPOCH), u64::MIN);
assert_eq!(u64::from(FileTime::UNIX_EPOCH), 116_444_736_000_000_000);
assert_eq!(u64::from(FileTime::MAX), u64::MAX);
source§impl From<u64> for FileTime
impl From<u64> for FileTime
source§fn from(time: u64) -> Self
fn from(time: u64) -> Self
Converts the file time to a FileTime
.
Equivalent to FileTime::new
except that it is not callable in const
contexts.
Examples
assert_eq!(FileTime::from(u64::MIN), FileTime::NT_TIME_EPOCH);
assert_eq!(
FileTime::from(116_444_736_000_000_000),
FileTime::UNIX_EPOCH
);
assert_eq!(FileTime::from(u64::MAX), FileTime::MAX);
source§impl Ord for FileTime
impl Ord for FileTime
source§impl PartialEq<DateTime<Utc>> for FileTime
Available on crate feature chrono
only.
impl PartialEq<DateTime<Utc>> for FileTime
chrono
only.source§impl PartialEq<FileTime> for DateTime<Utc>
Available on crate feature chrono
only.
impl PartialEq<FileTime> for DateTime<Utc>
chrono
only.source§impl PartialEq<FileTime> for FileTime
impl PartialEq<FileTime> for FileTime
source§impl PartialEq<FileTime> for OffsetDateTime
impl PartialEq<FileTime> for OffsetDateTime
source§impl PartialEq<FileTime> for SystemTime
Available on crate feature std
only.
impl PartialEq<FileTime> for SystemTime
std
only.source§impl PartialEq<OffsetDateTime> for FileTime
impl PartialEq<OffsetDateTime> for FileTime
source§fn eq(&self, other: &OffsetDateTime) -> bool
fn eq(&self, other: &OffsetDateTime) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl PartialEq<SystemTime> for FileTime
Available on crate feature std
only.
impl PartialEq<SystemTime> for FileTime
std
only.source§fn eq(&self, other: &SystemTime) -> bool
fn eq(&self, other: &SystemTime) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl PartialOrd<DateTime<Utc>> for FileTime
Available on crate feature chrono
only.
impl PartialOrd<DateTime<Utc>> for FileTime
chrono
only.1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl PartialOrd<FileTime> for DateTime<Utc>
Available on crate feature chrono
only.
impl PartialOrd<FileTime> for DateTime<Utc>
chrono
only.1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl PartialOrd<FileTime> for FileTime
impl PartialOrd<FileTime> for FileTime
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl PartialOrd<FileTime> for OffsetDateTime
impl PartialOrd<FileTime> for OffsetDateTime
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl PartialOrd<FileTime> for SystemTime
Available on crate feature std
only.
impl PartialOrd<FileTime> for SystemTime
std
only.1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl PartialOrd<OffsetDateTime> for FileTime
impl PartialOrd<OffsetDateTime> for FileTime
source§fn partial_cmp(&self, other: &OffsetDateTime) -> Option<Ordering>
fn partial_cmp(&self, other: &OffsetDateTime) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl PartialOrd<SystemTime> for FileTime
Available on crate feature std
only.
impl PartialOrd<SystemTime> for FileTime
std
only.source§fn partial_cmp(&self, other: &SystemTime) -> Option<Ordering>
fn partial_cmp(&self, other: &SystemTime) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl Serialize for FileTime
Available on crate feature serde
only.
impl Serialize for FileTime
serde
only.source§fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error>
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error>
Serializes a FileTime
into the given Serde serializer.
This serializes using the underlying u64
format.
Examples
assert_eq!(
serde_json::to_string(&FileTime::UNIX_EPOCH).unwrap(),
"116444736000000000"
);
assert_eq!(
serde_json::to_string(&Some(FileTime::UNIX_EPOCH)).unwrap(),
"116444736000000000"
);
assert_eq!(serde_json::to_string(&None::<FileTime>).unwrap(), "null");
source§impl Sub<FileTime> for OffsetDateTime
impl Sub<FileTime> for OffsetDateTime
source§impl Sub<FileTime> for SystemTime
Available on crate feature std
only.
impl Sub<FileTime> for SystemTime
std
only.source§impl Sub<OffsetDateTime> for FileTime
impl Sub<OffsetDateTime> for FileTime
source§impl Sub<SystemTime> for FileTime
Available on crate feature std
only.
impl Sub<SystemTime> for FileTime
std
only.source§impl SubAssign<Duration> for FileTime
impl SubAssign<Duration> for FileTime
source§fn sub_assign(&mut self, rhs: Duration)
fn sub_assign(&mut self, rhs: Duration)
-=
operation. Read moresource§impl SubAssign<Duration> for FileTime
impl SubAssign<Duration> for FileTime
source§fn sub_assign(&mut self, rhs: Duration)
fn sub_assign(&mut self, rhs: Duration)
-=
operation. Read moresource§impl TryFrom<DateTime<Utc>> for FileTime
Available on crate feature chrono
only.
impl TryFrom<DateTime<Utc>> for FileTime
chrono
only.source§fn try_from(dt: DateTime<Utc>) -> Result<Self, Self::Error>
fn try_from(dt: DateTime<Utc>) -> Result<Self, Self::Error>
Converts a DateTime<Utc>
to a FileTime
.
Errors
Returns Err
if dt
is out of range for the file time.
Examples
assert_eq!(
FileTime::try_from(Utc.with_ymd_and_hms(1601, 1, 1, 0, 0, 0).unwrap()).unwrap(),
FileTime::NT_TIME_EPOCH
);
assert_eq!(
FileTime::try_from(Utc.timestamp_opt(0, 0).unwrap()).unwrap(),
FileTime::UNIX_EPOCH
);
assert!(FileTime::try_from(
Utc.with_ymd_and_hms(1601, 1, 1, 0, 0, 0).unwrap() - Duration::nanoseconds(1)
)
.is_err());
assert!(FileTime::try_from(
Utc.with_ymd_and_hms(60056, 5, 28, 5, 36, 10).unwrap()
+ Duration::nanoseconds(955_161_500)
+ Duration::nanoseconds(100)
)
.is_err());
§type Error = FileTimeRangeError
type Error = FileTimeRangeError
source§impl TryFrom<FileTime> for OffsetDateTime
impl TryFrom<FileTime> for OffsetDateTime
source§fn try_from(time: FileTime) -> Result<Self, Self::Error>
fn try_from(time: FileTime) -> Result<Self, Self::Error>
Converts a FileTime
to a OffsetDateTime
.
Errors
Returns Err
if time
is out of range for OffsetDateTime
.
Examples
assert_eq!(
OffsetDateTime::try_from(FileTime::NT_TIME_EPOCH).unwrap(),
PrimitiveDateTime::new(
Date::from_calendar_date(1601, Month::January, 1).unwrap(),
Time::MIDNIGHT
)
.assume_utc()
);
assert_eq!(
OffsetDateTime::try_from(FileTime::UNIX_EPOCH).unwrap(),
OffsetDateTime::UNIX_EPOCH
);
With the large-dates
feature disabled, returns Err
if the file
time represents after “9999-12-31 23:59:59.999999900 UTC”:
assert!(OffsetDateTime::try_from(FileTime::new(2_650_467_744_000_000_000)).is_err());
With the large-dates
feature enabled, this always succeeds:
assert_eq!(
OffsetDateTime::try_from(FileTime::new(2_650_467_744_000_000_000)).unwrap(),
PrimitiveDateTime::new(
Date::from_calendar_date(10000, Month::January, 1).unwrap(),
Time::MIDNIGHT
)
.assume_utc()
);
assert_eq!(
OffsetDateTime::try_from(FileTime::MAX).unwrap(),
PrimitiveDateTime::new(
Date::from_calendar_date(60056, Month::May, 28).unwrap(),
Time::from_hms_nano(5, 36, 10, 955_161_500).unwrap()
)
.assume_utc()
);
§type Error = OffsetDateTimeRangeError
type Error = OffsetDateTimeRangeError
source§impl TryFrom<OffsetDateTime> for FileTime
impl TryFrom<OffsetDateTime> for FileTime
source§fn try_from(dt: OffsetDateTime) -> Result<Self, Self::Error>
fn try_from(dt: OffsetDateTime) -> Result<Self, Self::Error>
Converts a OffsetDateTime
to a FileTime
.
Errors
Returns Err
if dt
is out of range for the file time.
Examples
assert_eq!(
FileTime::try_from(
PrimitiveDateTime::new(
Date::from_calendar_date(1601, Month::January, 1).unwrap(),
Time::MIDNIGHT
)
.assume_utc()
)
.unwrap(),
FileTime::NT_TIME_EPOCH
);
assert_eq!(
FileTime::try_from(OffsetDateTime::UNIX_EPOCH).unwrap(),
FileTime::UNIX_EPOCH
);
assert!(FileTime::try_from(
PrimitiveDateTime::new(
Date::from_calendar_date(1601, Month::January, 1).unwrap(),
Time::MIDNIGHT
)
.assume_utc()
- Duration::NANOSECOND
)
.is_err());
With the large-dates
feature enabled, returns Err
if
OffsetDateTime
represents after “+60056-05-28 05:36:10.955161500
UTC”:
assert!(FileTime::try_from(
PrimitiveDateTime::new(
Date::from_calendar_date(60056, Month::May, 28).unwrap(),
Time::from_hms_nano(5, 36, 10, 955_161_500).unwrap()
)
.assume_utc()
+ Duration::nanoseconds(100)
)
.is_err());
§type Error = FileTimeRangeError
type Error = FileTimeRangeError
source§impl TryFrom<SystemTime> for FileTime
Available on crate feature std
only.
impl TryFrom<SystemTime> for FileTime
std
only.source§fn try_from(time: SystemTime) -> Result<Self, Self::Error>
fn try_from(time: SystemTime) -> Result<Self, Self::Error>
Converts a SystemTime
to a FileTime
.
Errors
Returns Err
if time
is out of range for the file time.
Examples
assert_eq!(
FileTime::try_from(SystemTime::UNIX_EPOCH - Duration::from_secs(11_644_473_600)).unwrap(),
FileTime::NT_TIME_EPOCH
);
assert_eq!(
FileTime::try_from(SystemTime::UNIX_EPOCH).unwrap(),
FileTime::UNIX_EPOCH
);
assert!(FileTime::try_from(
SystemTime::UNIX_EPOCH - Duration::from_nanos(11_644_473_600_000_000_100)
)
.is_err());
assert!(FileTime::try_from(
SystemTime::UNIX_EPOCH + Duration::new(1_833_029_933_770, 955_161_600)
)
.is_err());