steamkit/util/
date_utils.rs1use std::time::{Duration, SystemTime, UNIX_EPOCH};
4
5use crate::error::SteamError;
6
7const MAX_UNIX_SECONDS: u64 = 253_402_300_799;
9
10pub fn date_time_from_unix_time(unix_time: u64) -> Result<SystemTime, SteamError> {
13 DateUtils::date_time_from_unix_time(unix_time)
14}
15
16pub fn date_time_to_unix_time(time: SystemTime) -> Result<u64, SteamError> {
19 DateUtils::date_time_to_unix_time(time)
20}
21
22#[derive(Debug)]
24pub struct DateUtils;
25
26impl DateUtils {
27 pub fn date_time_from_unix_time(unix_time: u64) -> Result<SystemTime, SteamError> {
30 if unix_time > MAX_UNIX_SECONDS {
31 return Err(SteamError::InvalidArgument(format!(
32 "The unix timestamp {unix_time} is outside of the representable date range."
33 )));
34 }
35
36 Ok(UNIX_EPOCH + Duration::from_secs(unix_time))
37 }
38
39 pub fn date_time_to_unix_time(time: SystemTime) -> Result<u64, SteamError> {
42 match time.duration_since(UNIX_EPOCH) {
43 Ok(duration) => Ok(duration.as_secs()),
44 Err(error) => Err(SteamError::InvalidArgument(format!(
45 "The date is before the unix epoch ({} seconds before it).",
46 error.duration().as_secs()
47 ))),
48 }
49 }
50}