Перетворення часу з одного часового поясу в інший

Обробка відмінностей між часовими поясами стає все більш важливою для всіх додатків, які працюють з датами і часом. При роботі програми не можна припускати, що всі значення часу можуть бути виражені за місцевим часом, яке доступне зі структури DateTime. Наприклад, веб-сторінка, яка відображає поточний час в східній частині США, буде містити недостовірні відомості для користувачів в східній Азії. У цьому розділі пояснюється, як перетворити час з одного часового поясу в інший, а також як перетворити значення DateTimeOffset з обмеженою підтримкою часових поясів.

Час в форматі UTC - це високоточний, атомарний стандарт часу. Часові пояси виражаються як позитивні або негативні зміщення щодо часу в форматі UTC. Таким чином, час у форматі UTC надає тип часу вільного від часових поясів або нейтрального часу часового поясу. Використання часу в форматі UTC рекомендовано, коли важлива сумісність дати і часу між комп'ютерами. (Додаткові відомості та рекомендації щодо використання дати і часу містяться в розділі Рекомендації по використанню DateTime в платформі .NET Framework.) Перетворення окремих часових поясів під час в форматі UTC спрощує порівняння часів.

Можна серіалізовать структуру DateTimeOffset для однозначного уявлення одного моменту часу. Оскільки об'єкти DateTimeOffset зберігають значення дати і часу разом з його зміщенням щодо часу в форматі UTC, то вони завжди представляють певний момент часу по відношенню до часу UTC.

Найпростішим способом перетворення часу в форматі UTC є виклик static (Shared в Visual Basic) методу TimeZoneInfo. ConvertTimeToUtc (DateTime). Точне перетворення, виконане цим методом, залежить від значення властивості Kind параметра dateTime. як показано в таблиці нижче.

Можна перетворити час між будь-якими двома часовими поясами за допомогою будь-якого з наступних двох static (Shared в Visual Basic) методів класу TimeZoneInfo.

Параметрами цього методу є значення дати і часу, яке Ви бажаєте перевести, об'єкт TimeZoneInfo. представляє часовий пояс значення дати і часу, і об'єкт TimeZoneInfo. представляє часовий пояс, до якого потрібно перевести дати і часу.

Параметрами цього методу є значення дати і часу, яке Ви бажаєте перевести, ідентифікатор часового поясу для значення дати і часу і ідентифікатор часового поясу, до якого потрібно перевести дати і часу.

Для обох методів потрібно, щоб властивість Kind значення дати і часу, яке Ви бажаєте перевести, відповідало об'єкту TimeZoneInfo чи кодом часового поясу, що представляє його часовий пояс. В іншому випадку виникає виняток ArgumentException. Наприклад, якщо властивістю Kind значення дати і часу є DateTimeKind.Local. то виключення виникне в тому випадку, якщо об'єкт TimeZoneInfo. який переданий в якості параметра методу, що не дорівнює TimeZoneInfo.Local. Також виняток виникне в тому випадку, якщо ідентифікатор, переданий як параметр методу, що не дорівнює TimeZoneInfo.Local.Id.

У наступному прикладі використовується метод ConvertTime для перетворення з гавайського стандартного часу за місцевим часом.