Как получить DateTime в указанную дату и время в указанном часовом поясе с помощью rust chrono
У меня есть название часового пояса, например "America/New_York", а также год, месяц, день, час, минута и секунда в этом часовом поясе для определенного времени. Как я могу получить объект DateTime с учетом часового пояса для этого времени в этом часовом поясе. Как локальный объект, но с указанным часовым поясом вместо местного часового пояса.
std::env::set_var("TZ", "America/New_York");
let x = Local.ymd(2019, 12, 1).and_hms(2, 0, 0);
Это дает результат, который я хочу, но я не хочу устанавливать переменную среды TZ, потому что я хочу, чтобы локальное время оставалось местным, и мне нужно иметь возможность изменять TZ для разных случаев, в то время как chrono только читает переменную среды TZ один раз, насколько я знаю.
Я хочу что-то вроде
пусть x =???.tz("Америка / Нью-Йорк").ymd(2019, 12, 1).and_hms(2, 0, 0);
Это возвращает DateTime с учетом часового пояса, который будет правильно обрабатывать такие операции, как добавление и вычитание продолжительности, с учетом часового пояса. Таким образом, FixeOffest не работает, потому что добавление продолжительности, которая охватывает переход на летнее время, например, не дает (по моему опыту) результата с правильным смещением - он остается на исходном фиксированном смещении, даже если это не так. не подать заявку на новую дату.
Что-то подобное существует? Могу ли я создать локальный объект с указанным TZ без установки переменной среды TZ?
1 ответ
Вы можете просто использоватьchrono_tz
use chrono::TimeZone;
use chrono_tz::Tz;
fn main() {
let x = chrono_tz::America::New_York.with_ymd_and_hms(2019, 12, 1, 2, 0, 0);
// or with parsing from a string:
let y = "America/New_York"
.parse::<Tz>()
.unwrap()
.with_ymd_and_hms(2022, 12, 1, 1, 39, 0);
dbg!(x, y);
}