2017-01-11 29 views
3

クロノクレートを使用して画面に日付を表​​示しています。タイムゾーンでUTC時刻を変換する

意図がない場合は、ユーザーの推奨時間または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(); 

user.timezoneに使用するタイプと日付を設定する方法についての例です。

答えて

3

chrono_tz::Tz::from_str("Europe/Berlin")で文字列をタイムゾーンに変換することができるchrono-tzクレートを使用できます。つまり、有効なタイムゾーン文字列を指定するだけです。あなたはその後、

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() 
} 

を使用することができます

型が一致しませんので、あなたは、元date変数を変更することはできません。タイムゾーンはタイプの一部です。 DateTime<chrono_tz::Tz>に完全に移動した場合は、変数を変更できますが、DateTimeのすべての用途を変更する必要があります。

関連する問題