datetime - 如何使用 Chrono 从 NaiveDate 转到特定的 TimeZone?
问题描述
我正在使用chrono crate在 Rust 中解析日期和时间。日期和时间来自网站,其中日期和时间来自页面的不同部分。
日期以格式显示%d/%m/%Y
(例如:27/08/2018)。时间仅显示小时(例如:12、10、21 等)
我想将这些日期时间存储为 UTC,以便我可以以“时区不可知论”的方式计算从现在到给定日期时间的剩余时间。我知道这些日期时间来自哪个时区(巴黎时间)。
我从日期输入创建了一个NaiveDate
(这是一项正在进行的工作,因此还没有错误处理):
let naive_date = NaiveDate::parse_from_str(date, "%d/%m/%Y").unwrap()
从那时起DateTime
,鉴于我有一个带小时的字符串,获得 UTC 的最佳方法是什么?
我迷失在各种TimeZone
/Offset
特征中,不知道是否应该使用 a Local
,或者FixedOffset
然后转换为Utc
.
解决方案
Chrono 文档可能会得到改进,以便更容易找到如何做这些事情。
假设这是您的起点:
use chrono::{DateTime, FixedOffset, NaiveDate, NaiveDateTime, NaiveTime, TimeZone, Utc};
// The date you parsed
let date = NaiveDate::from_ymd(2018, 5, 13);
// The known 1 hour time offset in seconds
let tz_offset = FixedOffset::east(1 * 3600);
// The known time
let time = NaiveTime::from_hms(17, 0, 0);
// Naive date time, with no time zone information
let datetime = NaiveDateTime::new(date, time);
然后,您可以使用FixedOffset
来构造 a DateTime
:
let dt_with_tz: DateTime<FixedOffset> = tz_offset.from_local_datetime(&datetime).unwrap();
如果您需要将其转换为 a DateTime<Utc>
,您可以这样做:
let dt_with_tz_utc: DateTime<Utc> = Utc.from_utc_datetime(&dt_with_tz.naive_utc());
推荐阅读
- python - 无法使用 Python 请求下载文件
- prestashop-modules - 我有兴趣消除 Prestashop 1.7.7.2 地址详细信息和发票中的双重国家出现
- python - 硒 + WSL 2
- prometheus - Prometheus where/if 子句
- shell - 如何使用 ksh 脚本扩展从文本文件中读取的 shell 变量
- c# - 如何在 C# 中遍历嵌套的 JSON 对象?
- aws-amplify - AWS Amplify API 不存在
- javascript - 奇怪的 scrollTop 函数行为 - JQuery
- python - 我可以用循环的“X”更改变量吗?
- node.js - NodeJS TypeError:sessionsMap[userId].push 不可迭代(无法读取属性 Symbol(Symbol.iterator))