Получение текущего времени в указанном часовом поясе

Используя библиотеку Chrono-TZ, как узнать текущее время в указанном часовом поясе?

Я старался

let naive_dt = Local::now().naive_local();
let dt = Los_Angeles.from_local_datetime(&naive_dt).unwrap();
println!("{:#?}", dt);

Но это напечатало дату и время в моем текущем часовом поясе и добавило запрошенный идентификатор часового пояса, что дало мне дату и время, которые отличаются от разницы часовых поясов.

Например, в 18:30 AEST (UTC+10) я спрашиваю текущее время в PST (UTC-8). Это должно быть 00:30 PST. Вместо этого я получаю 18:30 PST

2 ответа

Решение

Построить значение на основе UTC, а не местного времени.

let utc = UTC::now().naive_utc();
let dt = Los_Angeles.from_utc_datetime(&utc);

Ты можешь использовать chrono::DateTime::with_timezone преобразовать DateTime<Utc> в другой часовой пояс.

Пример:

      #![forbid(unsafe_code)]
use chrono::{DateTime, Utc};
use chrono_tz::Tz;
use chrono_tz::US::Pacific;

fn main() {
    let pacific_now: DateTime<Tz> = Utc::now().with_timezone(&Pacific);
    println!("pacific_now = {}", pacific_now);
}
      $ cargo run --bin example
pacific_now = 2021-07-01 23:22:11.052490 PDT
Другие вопросы по тегам