Получение текущего времени в указанном часовом поясе
Используя библиотеку 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