Rust 通过时区转换UTC时间

Rust 通过时区转换UTC时间,rust,timezone,rust-chrono,Rust,Timezone,Rust Chrono,我使用chrono板条箱在屏幕上显示日期 目的是在用户首选时间或UTC(如果未设置)中显示日期 我设置了UTC默认值,但我不确定记录用户时区的最佳方法以及如何将其应用于当前日期 注意:date可能未在此处设置,因此我希望修改date而不是使用其他构造函数 let mut date: DateTime<UTC> = UTC::now(); //Convert to the User's Timezone if present if let Some(user) = user {

我使用chrono板条箱在屏幕上显示日期

目的是在用户首选时间或UTC(如果未设置)中显示日期

我设置了UTC默认值,但我不确定记录用户时区的最佳方法以及如何将其应用于当前日期

注意:
date
可能未在此处设置,因此我希望修改
date
而不是使用其他构造函数

let mut date: DateTime<UTC> = UTC::now();

//Convert to the User's Timezone if present
if let Some(user) = user {
    //Extract the timezone
    date.with_timezone(TimeZone::from_offset(&user.timezone));
}

let date_text = date.format("%H:%M %d/%m/%y").to_string();
让mut date:DateTime=UTC::now();
//转换为用户的时区(如果存在)
如果让某些(用户)=用户{
//提取时区
date.with_时区(时区::from_偏移量(&user.timezone));
}
将date_text=date.format(“%H:%M%d/%M/%y”)。转换为_字符串();

我想要的是一个用于
user.timezone
的类型和一个如何设置日期的示例。

您可以使用
chrono tz
板条箱,它允许您使用
chrono_tz::tz::from_str(“欧洲/柏林”)
将字符串转换为时区。因此,用户所要做的就是提供一个有效的时区字符串

然后您可以使用

fn date_time_str<Tz: chrono::TimeZone>(date: DateTime<Tz>, user: User) -> String {
    if let Some(user) = user {
        if let Ok(tz) = chrono_tz::Tz::from_str(user.timezone) {
            let newdate = date.with_timezone(tz);
            return newdate.format("%H:%M %d/%m/%y").to_string();
        }
    }
    date.format("%H:%M %d/%m/%y").to_string()
}
fn date\u time\u str(日期:DateTime,用户:user)->String{
如果让某些(用户)=用户{
如果让Ok(tz)=计时tz::tz::from_str(user.timezone){
设newdate=date.with_时区(tz);
将newdate.format(“%H:%M%d/%M/%y”)返回到_string();
}
}
日期。格式(“%H:%M%d/%M/%y”)。到_字符串()
}
无法修改原始的
date
变量,因为类型不匹配。时区是该类型的一部分。如果完全移动到
DateTime
,则可以修改变量,但需要更改
DateTime
的所有用法