一尘不染

在C#中的特定时区中创建DateTime

c#

我正在尝试创建一个单元测试,以测试时区在计算机上更改的情况,因为该时区已被错误地设置然后被更正。

在测试中,我需要能够在非本地时区中创建DateTime对象,以确保进行测试的人员可以成功地进行操作,而不管他们位于何处。

从DateTime构造函数中可以看到,我可以将TimeZone设置为本地时区,UTC时区或未指定。

如何创建具有特定时区(例如PST)的DateTime?


阅读 346

收藏
2020-05-19

共1个答案

一尘不染

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”,以使事情更清楚-我更喜欢简短的名称。

2020-05-19