Working with DateTimes and Time Zones in C#
Many programming tasks, especially in testing, demand the creation of DateTime
objects tied to specific time zones. While the DateTime
constructor handles local, UTC, and unspecified times, using TimeZoneInfo
offers more precise control.
Leveraging TimeZoneInfo
Instead of relying solely on the DateTime
constructor's TimeZone
property, TimeZoneInfo
provides superior time zone management and conversion capabilities.
Custom DateTime Structure
This example uses a custom structure, DateTimeWithZone
, to encapsulate a DateTime
and its associated time zone:
<code class="language-csharp">public struct DateTimeWithZone { private readonly DateTime utcDateTime; private readonly TimeZoneInfo timeZone; public DateTimeWithZone(DateTime dateTime, TimeZoneInfo timeZone) { var dateTimeUnspec = DateTime.SpecifyKind(dateTime, DateTimeKind.Unspecified); utcDateTime = TimeZoneInfo.ConvertTimeToUtc(dateTimeUnspec, timeZone); this.timeZone = timeZone; } public DateTime UniversalTime => utcDateTime; public TimeZoneInfo TimeZone => timeZone; public DateTime LocalTime => TimeZoneInfo.ConvertTime(utcDateTime, timeZone); }</code>
Practical Application
To create a DateTimeWithZone
object in the Pacific Standard Time (PST) zone:
<code class="language-csharp">var pstDateTime = new DateTimeWithZone(new DateTime(2023, 1, 1), TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));</code>
This approach enables seamless work with DateTime
objects in specific time zones, facilitating conversions between UTC and local time as required.
The above is the detailed content of How Can I Create DateTimes with Specific Time Zones in C#?. For more information, please follow other related articles on the PHP Chinese website!