如何在Rust中将本地时区转换为UTC

qlfbtfca  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(286)

我正在尝试将本地时间转换为UTC,如下所示

fn main() {

    let nd_local = NaiveDate::from_ymd(2020,10,10).and_hms(10,10,10);
    let time_at_kolkata = Kolkata.from_local_datetime(&nd_local);

    println!("KOLKATA_TIME {:?}", time_at_kolkata);
    println!("UTC TIME {:?}", time_at_kolkata.naive_utc());

}

但它错误地输出为

println!("UTC TIME {:?}", time_at_kolkata.naive_utc());
   |                                               ^^^^^^^^^ method not found in `LocalResult<DateTime<Tz>>`

这里我试着把它转换成naive_utc,但是一般来说,我怎么把我的Kolkata日期时间转换成DateTime<Utc>示例呢?

3qpi33ja

3qpi33ja1#

但它错误地输出为

println!("UTC TIME {:?}", time_at_kolkata.naive_utc());
   |                                               ^^^^^^^^^ method not found in `LocalResult<DateTime<Tz>>`

看看错误消息,您期待的是DateTime,但它明确地告诉您它有一个LocalResult<Datetime<Tz>>
这是因为from_local_datetime是易出故障的:
将本地NaiveDateTime转换为可识别时区的DateTime(如果可能)
some naive datetimes don't map any date in the timezone, and some are ambiguous(可以Map到时区中的多个日期)。您需要决定是否以及如何处理这些情况。
除此之外,
但是一般来说,如何将Kolkata日期时间转换为DateTime<Utc>示例呢?
如上所述,你目前没有一个"Kolkata datetime",所以你需要修复它。我不知道你为什么要通过NaiveDateTime然后本地化它,因为TimeZoneymd/and_hms构建器。所以你应该可以直接请求"October 10th 2020 at 10:10:10 in the Kolkata timezone":

Kolkata::ymd(2020, 10, 10).and_hms(10, 10, 10)

然后,您可以使用with_timezone来"移动"日期时间。

相关问题