2017-03-06 4 views
2

jwt crateを使用していて、Claims構造体に有効期限を設定したいとします。 RegisteredexpフィールドはOption<u64>でした。時間を変換する方法:: TmをJUVの有効期限のためにu64に変更する

私は、現在の日付を取得し、実行することにより、それまで1日を追加することができます。

let mut timer = time::now(); 
timer = timer + Duration::days(1); 

が、私はu64このtime::Tmを変換する方法が表示されません。

答えて

3

expフィールドは、RFC 7519に従う「NumericDate」型である「1970-01-01T00からの秒数:うるう秒を無視し、指定されたUTC日付/時刻まで00Z UTC:00。」

この説明は、Tmの現在のタイムゾーン*に「秒を1970年1月1日から秒に変換します。」と同じthe to_timespec methodと同じです。したがって

let mut timer = time::now_utc(); 
timer = timer + Duration::days(1); 
token.claims.reg.exp = Some(timer.to_timespec().sec as u64); 

は(time + durationは常にv0.1.36のようUTC時刻を返しながら、それが将来的に固定することができることを間違いなくa defectであることに注意してください前方互換であるためには、私が代わりにnow_utc()を使用。 now()の)

(*:。to_timespecは、基本的にはPOSIXにgmtime()を呼び出し、POSIX標準はうるう秒を無視するWindowsでは、それはFILETIME which again ignores leap secondsに構造を変換するあなたはreallのであればto_timespecを使用しても安全です。あなたがstd::time::SystemTimeを使用している場合は27秒差についてyのケア。)


、同じことはあなたが私の一日保存

let mut timer = SystemTime::now(); 
timer += Duration::from_secs(86400); 
token.claims.reg.exp = Some(timer.duration_since(UNIX_EPOCH).unwrap().as_secs()); 
+0

を使用して取得することができます! – NotBad4U

関連する問題