Rust 中的日期和时间处理:完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Rust 中的日期和时间处理:从 A 到 Z



日期和时间处理是任何应用程序开发中的关键任务之一:从 Web 服务到日志系统。在以其安全性和性能著称的 Rust 中,日期处理是通过强大的 chrono 库实现的。在本文中,我们将深入探讨日期和时间处理的所有方面:从基本操作到时区的复杂操作。



1. 安装和配置 chrono 库



chrono 库是 Rust 中处理日期和时间的事实标准。它提供了一套完整的工具:从简单的日期对象到考虑时区的复杂类型。



要开始使用,请在 Cargo.toml 文件中添加依赖项:



[dependencies]chrono = "0.4"


之后,将必要的模块导入到您的代码中:



use chrono::{NaiveDate, NaiveDateTime, DateTime, Utc, Local, Duration};use chrono::format::ParseError;


2. 用于日期处理的基本数据类型



在 chrono 中,有几种关键类型可以满足开发者的所有需求:



  • NaiveDate — 不带时间和时区的日期(例如,2024-01-15)。
  • NaiveTime — 不带日期和时区的时间(例如,14:30:00)。
  • NaiveDateTime — 不带时区的日期和时间组合。
  • DateTime<Tz> — 带有时区的日期和时间(例如,DateTime<Utc> 或 DateTime<Local>)。


让我们看一个创建每种类型对象的示例:



// 创建 NaiveDatelet date = NaiveDate::from_ymd_opt(2024, 1, 15).unwrap();println!("日期: {}", date); // 2024-01-15

// 创建 NaiveTimelet time = NaiveTime::from_hms_opt(14, 30, 0).unwrap();println!("时间: {}", time); // 14:30:00

// 创建 NaiveDateTimelet datetime = NaiveDateTime::new(date, time);println!("日期和时间: {}", datetime); // 2024-01-15 14:30:00

// 创建带 UTC 时区的 DateTimelet utc_datetime = Utc::now();println!("当前 UTC 时间: {}", utc_datetime);

// 创建带本地时区的 DateTimelet local_datetime = Local::now();println!("当前本地时间: {}", local_datetime);


3. 日期格式化和解析



最常见的任务之一是将日期转换为字符串以及反向转换。chrono 使用类似于 C 语言中 strftime 的格式字符串。



将日期格式化为字符串



使用 .format() 方法进行格式化:



use chrono::Utc;

let now = Utc::now();

// 标准 ISO 8601 格式println!("ISO 8601: {}", now.format("%Y-%m-%dT%H:%M:%S%z"));

// 中文格式println!("中文格式: {}", now.format("%Y年%m月%d日 %H:%M"));

// 仅日期println!("仅日期: {}", now.format("%A, %d %B %Y"));

// 输出:// ISO 8601: 2024-01-15T14:30:00+0000// 中文格式: 2024年01月15日 14:30// 仅日期: Monday, 15 January 2024


主要的格式说明符:



  • %Y — 年份(4 位数字)
  • %m — 月份(01-12)
  • %d — 日期(01-31)
  • %H — 小时(00-23)
  • %M — 分钟(00-59)
  • %S — 秒(00-59)
  • %z — 时区偏移量
  • %A — 星期几的全名
  • %B — 月份的全名


将字符串解析为日期



使用 parse_from_str() 方法将字符串转换为日期:



use chrono::NaiveDate;use chrono::format::ParseError;

fn parse_date(dat

博客

书籍推荐