小编典典

在 c# 中的特定时区创建日期时间

all

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

在测试中,我需要能够在非本地时区创建 DateTime 对象,以确保运行测试的人无论身在何处都可以成功地做到这一点。

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

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


阅读 83

收藏
2022-07-08

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

2022-07-08