How do I go from a NaiveDate to a specific TimeZone with Chrono?

前端 未结 3 500
执笔经年
执笔经年 2021-01-04 21:52

I am parsing dates and times in Rust using the chrono crate. The dates and times are from a website in which the date and time are from different sections of the page.

3条回答
  •  误落风尘
    2021-01-04 21:57

    The Chrono documentation could probably be improved to make it easier to find how to do these things.

    Assuming this is your starting point:

    use chrono::{DateTime, FixedOffset, NaiveDate, NaiveDateTime, NaiveTime, TimeZone, Utc};
    
    // The date you parsed
    let date = NaiveDate::from_ymd(2018, 5, 13);
    // The known 1 hour time offset in seconds
    let tz_offset = FixedOffset::east(1 * 3600);
    // The known time
    let time = NaiveTime::from_hms(17, 0, 0);
    // Naive date time, with no time zone information
    let datetime = NaiveDateTime::new(date, time);
    

    You can then use the FixedOffset to construct a DateTime:

    let dt_with_tz: DateTime = tz_offset.from_local_datetime(&datetime).unwrap();
    

    If you need to convert it to a DateTime, you can do this:

    let dt_with_tz_utc: DateTime = Utc.from_utc_datetime(&dt_with_tz.naive_utc());
    

提交回复
热议问题