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