Rust 日期处理:时间与日历库概览

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

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

开始课程

Rust 日期处理:时间与日历库



Rust 是一种现代系统编程语言,具有严格的类型系统和内存安全性。然而,Rust 的标准库仅提供最基本的日期和时间处理功能。为了全面处理日历、时区、格式化和计算,开发者需要使用第三方 crate。本文将详细介绍三个主要库:chrono、time 和 jiff,并提供实用示例。



1. chrono 库——事实上的标准



chrono 是 Rust 中最流行的日期处理库。它提供了丰富的 API,用于创建、操作和格式化日期与时间。主要类型包括:NaiveDate、NaiveDateTime、DateTime(带时区)和 Duration。



安装

# Cargo.toml[dependencies]chrono = "0.4"


示例:当前日期和时间

use chrono::{Local, Utc};

fn main() { let now_utc = Utc::now(); let now_local = Local::now(); println!("UTC: {}", now_utc); println!("Local: {}", now_local);}


示例:字符串解析与格式化

use chrono::NaiveDate;

fn main() { let date = NaiveDate::parse_from_str("2025-03-15", "%Y-%m-%d") .expect("日期格式无效"); println!("日期: {}", date.format("%d.%m.%Y"));}


优点:庞大的社区支持,通过 chrono-tz 支持时区,可处理间隔和时长。



缺点:体积相对较大,处理非标准日历较为复杂。



2. time 库——轻量级替代方案



time 是一个更现代、更轻量的库,正在积极开发中。它使用严格的类型系统来防止错误(例如,区分 Date、Time、OffsetDateTime 和 PrimitiveDateTime)。



安装

[dependencies]time = "0.3"


示例:创建日期并计算差值

use time::{Date, Month, Duration};

fn main() { let start = Date::from_calendar_date(2025, Month::March, 10).unwrap(); let end = Date::from_calendar_date(2025, Month::March, 20).unwrap(); let diff = end - start; println!("差值: {} 天", diff.whole_days());}


示例:格式化

use time::OffsetDateTime;use time::format_description::well_known::Rfc3339;

fn main() { let now = OffsetDateTime::now_utc(); let formatted = now.format(&Rfc3339).unwrap(); println!("RFC 3339: {}", formatted);}


优点:体积小,类型划分清晰,文档优秀。



缺点:网上的示例比 chrono 少。



3. jiff 库——用于高精度间隔



jiff 是一个专门用于处理日历间隔和重复事件的库。它对于任务调度、提醒和工作日计算非常有用。



安装

[dependencies]jiff = "0.1"


示例:创建间隔并检查包含关系

use jiff::ZonedInterval;use jiff::tz::TimeZone;

fn main() { let tz = TimeZone::get("Europe/Moscow").unwrap(); let start = tz.to_zoned(2025, 3, 1, 0, 0, 0, 0).unwrap(); let end = tz.to_zoned(2025, 3, 31, 23, 59, 59, 0).unwrap(); let interval = ZonedInterval::new(start, end); let check = tz.to_zoned(2025, 3, 15, 12, 0, 0, 0).unwrap(); println!("3月15日是否在间隔内? {}", interval.contains(&check));}


优点:适合日历

推荐