我正在尝试创建一个单元测试,以测试时区在计算机上更改的情况,因为该时区已被错误地设置然后被更正。
在测试中,我需要能够在非本地时区中创建DateTime对象,以确保进行测试的人员可以成功地进行操作,而不管他们位于何处。
从DateTime构造函数中可以看到,我可以将TimeZone设置为本地时区,UTC时区或未指定。
如何创建具有特定时区(例如PST)的DateTime?
Jon的答案是有关TimeZone的,但我建议改用TimeZoneInfo。
我个人喜欢尽可能将内容保存在UTC中(至少在过去;将UTC存储在 将来会 存在潜在的问题),所以我建议采用这样的结构:
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 { get { return utcDateTime; } } public TimeZoneInfo TimeZone { get { return timeZone; } } public DateTime LocalTime { get { return TimeZoneInfo.ConvertTime(utcDateTime, timeZone); } } }
您可能希望将“ TimeZone”名称更改为“ TimeZoneInfo”,以使事情更清楚-我更喜欢简短的名称。