我正在尝试创建一个单元测试来测试机器上时区何时更改的情况,因为它已被错误地设置然后更正。
在测试中,我需要能够在非本地时区创建 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”以使事情更清晰 - 我自己更喜欢更简短的名称。