Rust如何获取和处理时间戳

在Rust中如何获取当前时间戳?如果我想将时间戳转换为可读的日期时间格式,应该使用哪些库或方法?另外,如何处理不同时区的时间戳转换?能否提供一个完整的示例代码?

2 回复

Rust中获取时间戳可以用std::time::SystemTime::now().duration_since(UNIX_EPOCH),返回Duration。处理时可用as_secs()获取秒级,as_millis()毫秒级。注意错误处理,unwrap()?处理Result


在Rust中处理时间戳主要使用 std::time 和第三方库 chrono

1. 使用标准库(std::time)

use std::time::{SystemTime, UNIX_EPOCH};

fn main() {
    // 获取当前时间戳(秒)
    let now = SystemTime::now();
    let since_epoch = now.duration_since(UNIX_EPOCH).unwrap();
    let timestamp_secs = since_epoch.as_secs();
    println!("当前时间戳(秒): {}", timestamp_secs);
    
    // 获取毫秒时间戳
    let timestamp_millis = since_epoch.as_millis();
    println!("当前时间戳(毫秒): {}", timestamp_millis);
    
    // 获取微秒时间戳
    let timestamp_micros = since_epoch.as_micros();
    println!("当前时间戳(微秒): {}", timestamp_micros);
}

2. 使用chrono库(推荐)

首先在Cargo.toml中添加依赖:

[dependencies]
chrono = { version = "0.4", features = ["serde"] }
use chrono::{DateTime, Utc, TimeZone, NaiveDateTime};

fn main() {
    // 获取当前时间戳
    let now = Utc::now();
    let timestamp_secs = now.timestamp();
    let timestamp_millis = now.timestamp_millis();
    
    println!("当前时间: {}", now);
    println!("时间戳(秒): {}", timestamp_secs);
    println!("时间戳(毫秒): {}", timestamp_millis);
    
    // 时间戳转DateTime
    let dt: DateTime<Utc> = DateTime::from_timestamp(timestamp_secs, 0).unwrap();
    println!("转换回时间: {}", dt);
    
    // 格式化时间
    let formatted = now.format("%Y-%m-%d %H:%M:%S").to_string();
    println!("格式化: {}", formatted);
}

3. 时间戳运算

use std::time::{SystemTime, Duration};

fn timestamp_operations() {
    let now = SystemTime::now();
    
    // 计算1小时后的时间戳
    let one_hour_later = now + Duration::from_secs(3600);
    
    // 计算时间差
    if let Ok(duration) = one_hour_later.duration_since(now) {
        println!("时间差: {}秒", duration.as_secs());
    }
}

总结

  • 简单场景:使用 std::time::SystemTime
  • 复杂时间操作:使用 chrono
  • 性能要求高:标准库性能更好
  • 功能丰富:chrono提供更多时间处理功能

chrono库是Rust生态中最常用的时间处理库,推荐在项目中使用。

回到顶部