Open3

Rustの時間変換

Toru3Toru3

入力 : st: std::time::SystemTime
出力 : r: time::OffsetDateTime
直接変換できるようなFromトレイトが無さそうなので以下のように変換する。

let d = st.duration_since(std::time::SystemTime::UNIX_EPOCH)?;
let r = time::OffsetDateTime::from_unix_timestamp(d.as_secs().try_into()?)?
    + std::time::Duration::from_nanos(d.subsec_nanos().into());
// UTCのままで良い場合は以下の2行は不要
let local_offset = time::UtcOffset::current_local_offset()?;
let r = r.checked_to_offset(local_offset).unwrap();
Toru3Toru3

time::UtcOffset::current_local_offsetlocal-offset featureが必要

Toru3Toru3

secとnanoに分けなくてもこれで十分そう

let d = st.duration_since(std::time::SystemTime::UNIX_EPOCH)?;
let r = time::OffsetDateTime::UNIX_EPOCH + d;
let local_offset = time::UtcOffset::current_local_offset()?;
let r = r.checked_to_offset(local_offset).unwrap();