Rust 日期与时间之chrono

特别说明

  1. 本文以一个Java-1.8 开发者视角学习 Rust中的日期与时间.
  2. Rust 版本: 1.8
  3. 由于Rust std 库里面的时间大多不好用,本文的示例都是基于chrono库。
  4. 本文的示例代码将返回类型推导写上了,方便查看。
  5. CSDN 的Markdown编辑器不支持 Rust代码着色,下面的代码块类型我标注的是cpp

在 chrono 中时间被分为四个类型。

此小节内容抄自:StackOverflow

1. Date

Date 只有年月日, 例如 2021-1-4.
即: 2021-1-4 => Date = NaiveDate

2. Time

Time 只有 时间,例如: 19:28:33.
即: 19:28:33 => Date = NaiveDate

3. Date 和 Time

DateTime 包含日期和时间.
即:2021-1-4 19:28:33 => Date + Time = NaiveDateTime

4. DateTime

真正的 DateTime 里面包含了日期,时间以及时区。
即:2021-1-4 19:28:33+08:00 => Date + Time + TimeZone = DateTime

毫秒时间与其结构互转

use chrono::prelude::*;
//
let now: DateTime<Local> = Local::now();
let mills: i64 = now.timestamp_millis(); // 1609761696945
println!("current time millis: {}", mills);
//
let dt: DateTime<Local> = Local.timestamp_millis(mills);
// date time parsed millis: 2021-01-04 20:01:36.945 +08:00
println!("date time parsed millis: {}", dt); 

格式化成字符串与从字符串中解析

与Java中用的格式化符号 yyyyMMdd 方式不同,该库用的和C 语言中的strftime差不多。详细符号表请看 Rust doc

use chrono::prelude::*;
//
let fmt = "%Y-%m-%d %H:%M:%S";
//
let now: DateTime<Local> = Local::now();
let dft: DelayedFormat<StrftimeItems> = now.format(fmt);
let str_date: String = dft.to_string(); // 2021-01-04 20:02:09
println!("now: {}", str_date);
//
let result: ParseResult<NaiveDateTime> = NaiveDateTime::parse_from_str(str_date.as_str(), fmt);
if result.is_err() {
    result.expect("parse error");
}
let date: NaiveDateTime = result.unwrap();
println!("time: {}, parsed from:'{}'", date, str_date);

需要注意的是,在将字符串时间解析成结构的时候,其形式一定要匹配之前说的四种类型。
就拿上面的代码来说,如果你使用 DateTime::parse_from_str() 的话就会报错,因为我们的格式化字符串和str_date中不包含时区。
但是你可以用 NaiveTime::parse_from_strNaiveDate::parse_from_str 来解析成时间或日期。

更多关于 chrono 库

关于时间的加加减减或者获取某个point这里就不讲了,写此文是为了帮助那些需要马上用Rust写代码但又不太熟悉Rust的人(例如我自己)。
更多详细的chrono库使用方法请参考下面的链接。

  1. Github
  2. Rust Doc
  3. Crates
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值