99 lines
2.6 KiB
Plaintext
99 lines
2.6 KiB
Plaintext
// Charter标准库 - 时间处理模块
|
||
// 提供时间戳、日期时间、时区转换等功能
|
||
|
||
module std::time;
|
||
|
||
// 时间戳结构
|
||
struct Timestamp {
|
||
seconds: u64, // Unix时间戳(秒)
|
||
nanos: u32, // 纳秒部分
|
||
}
|
||
|
||
impl Timestamp {
|
||
// 获取当前时间戳
|
||
public fun now() -> Timestamp {
|
||
let seconds = native_timestamp_seconds();
|
||
let nanos = native_timestamp_nanos();
|
||
Timestamp { seconds, nanos }
|
||
}
|
||
|
||
// 从秒创建时间戳
|
||
public fun from_seconds(seconds: u64) -> Timestamp {
|
||
Timestamp { seconds, nanos: 0 }
|
||
}
|
||
|
||
// 转换为秒
|
||
public fun as_seconds(&self) -> u64 {
|
||
self.seconds
|
||
}
|
||
|
||
// 转换为毫秒
|
||
public fun as_millis(&self) -> u64 {
|
||
self.seconds * 1000 + (self.nanos / 1_000_000) as u64
|
||
}
|
||
|
||
// 添加秒数
|
||
public fun add_seconds(&mut self, seconds: u64) {
|
||
self.seconds += seconds;
|
||
}
|
||
|
||
// 添加天数
|
||
public fun add_days(&mut self, days: u64) {
|
||
self.seconds += days * 86400;
|
||
}
|
||
|
||
// 比较时间戳
|
||
public fun is_before(&self, other: &Timestamp) -> bool {
|
||
if self.seconds < other.seconds {
|
||
return true;
|
||
}
|
||
if self.seconds == other.seconds && self.nanos < other.nanos {
|
||
return true;
|
||
}
|
||
false
|
||
}
|
||
|
||
// 计算时间差(秒)
|
||
public fun diff_seconds(&self, other: &Timestamp) -> u64 {
|
||
if self.seconds >= other.seconds {
|
||
self.seconds - other.seconds
|
||
} else {
|
||
other.seconds - self.seconds
|
||
}
|
||
}
|
||
}
|
||
|
||
// 日期时间结构
|
||
struct DateTime {
|
||
year: u32,
|
||
month: u8, // 1-12
|
||
day: u8, // 1-31
|
||
hour: u8, // 0-23
|
||
minute: u8, // 0-59
|
||
second: u8, // 0-59
|
||
}
|
||
|
||
impl DateTime {
|
||
// 创建日期时间
|
||
public fun new(year: u32, month: u8, day: u8, hour: u8, minute: u8, second: u8) -> DateTime {
|
||
DateTime { year, month, day, hour, minute, second }
|
||
}
|
||
|
||
// 转换为时间戳
|
||
public fun to_timestamp(&self) -> Timestamp {
|
||
let seconds = datetime_to_unix(self.year, self.month, self.day, self.hour, self.minute, self.second);
|
||
Timestamp::from_seconds(seconds)
|
||
}
|
||
|
||
// 从时间戳创建
|
||
public fun from_timestamp(ts: &Timestamp) -> DateTime {
|
||
unix_to_datetime(ts.seconds)
|
||
}
|
||
}
|
||
|
||
// Native函数声明
|
||
native fun native_timestamp_seconds() -> u64;
|
||
native fun native_timestamp_nanos() -> u32;
|
||
native fun datetime_to_unix(year: u32, month: u8, day: u8, hour: u8, minute: u8, second: u8) -> u64;
|
||
native fun unix_to_datetime(seconds: u64) -> DateTime;
|