Rust中如何格式化SystemTime
在Rust中,如何将SystemTime格式化为可读的日期时间字符串?比如我想把它转换成"YYYY-MM-DD HH:MM:SS"这样的格式。有没有标准库的方法可以直接实现,或者需要借助第三方库?如果能给出示例代码就更好了。
2 回复
在 Rust 中,可以使用 std::time::SystemTime 来获取系统时间,但 SystemTime 本身不直接提供格式化方法。要格式化 SystemTime,通常需要将其转换为 std::time::Duration 或 chrono 库中的类型。以下是两种常用方法:
1. 使用标准库(转换为 UNIX 时间戳)
将 SystemTime 转换为自 UNIX 纪元以来的秒数,然后使用 chrono 库进行格式化(推荐):
use std::time::{SystemTime, UNIX_EPOCH};
use chrono::{DateTime, Utc, TimeZone};
fn main() {
let now = SystemTime::now();
let since_epoch = now.duration_since(UNIX_EPOCH).expect("Time went backwards");
// 转换为 DateTime<Utc>
let datetime: DateTime<Utc> = Utc.timestamp(since_epoch.as_secs() as i64, since_epoch.subsec_nanos());
// 格式化输出
let formatted = datetime.format("%Y-%m-%d %H:%M:%S").to_string();
println!("{}", formatted); // 例如:2023-10-05 14:30:00
}
2. 直接使用 chrono 库(更简洁)
如果项目已依赖 chrono,可以直接用 chrono::Utc::now() 获取当前时间并格式化:
use chrono::{Utc, DateTime};
fn main() {
let now: DateTime<Utc> = Utc::now();
let formatted = now.format("%Y-%m-%d %H:%M:%S").to_string();
println!("{}", formatted);
}
格式化说明:
%Y:年份(4 位数)%m:月份(01-12)%d:日期(01-31)%H:小时(00-23)%M:分钟(00-59)%S:秒(00-59)
注意事项:
- 使用
chrono需在Cargo.toml中添加依赖:chrono = { version = "0.4", features = ["serde"] } - 如果仅需简单时间戳,可用
since_epoch.as_secs()直接获取秒数。
选择哪种方法取决于项目需求和对第三方库的依赖偏好。


