【问题标题】:How do I pass a chrono::DateTime of one particular timezone to a function?如何将一个特定时区的 chrono::DateTime 传递给函数?
【发布时间】:2020-10-13 20:03:36
【问题描述】:

我正在尝试将特定时区中的日期传递给函数并尝试打印它:

use chrono::{DateTime, TimeZone, Utc};  
use chrono_tz::Asia::Kolkata;

fn print_ist_time(date_time: DateTime<Kolkata>) {
    println!("Time in IST {:?}", date_time)
}


fn main() {
    let current_time = Utc::now().naive_utc();
    println!("{}", current_time);
    let ist_time = Kolkata.from_utc_datetime(&current_time);
    print_ist_time(ist_time)
}

当我编译这个时,我得到以下错误:

error[E0107]: wrong number of const arguments: expected 0, found 1
 --> src/main.rs:4:39
  |
4 | fn print_ist_time(date_time: DateTime<Kolkata>) {
  |                                       ^^^^^^^ unexpected const argument

error[E0107]: wrong number of type arguments: expected 1, found 0
 --> src/main.rs:4:30
  |
4 | fn print_ist_time(date_time: DateTime<Kolkata>) {
  |                              ^^^^^^^^^^^^^^^^^ expected 1 type argument

我无法弄清楚问题。

【问题讨论】:

  • Kolkata 不是类型,it is a value of type Tz。您不能在需要类型的地方使用值。
  • 好的。那么有没有办法确保传递的值是 Kolkta 时间戳
  • @AsnimPAnsari:编译时解决方案需要重新设计chrono 以使用const generics(或自己动手),但您可能真的在运行时检查之后,例如assert_eq!(date_time.timezone(), Kolkata);(或者,更有可能是带有适当错误处理的 match 语句)。
  • 为什么要确保经过的时间在加尔各答时区?不能直接转换吗?

标签: rust chrono


【解决方案1】:

如果您想知道不同国家/地区的时区,请尝试chrono-tz 库。

因为这不是 Chrono 本身(在某种意义上除了Local,但这也取决于系统时间,我认为)

【讨论】:

  • 您能否扩展您的答案以清晰简洁地展示它如何应用于以下问题:如何将一个特定时区的 chrono::DateTime 传递给函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多