C# 验证System.DateTime为UTC格式

C# 验证System.DateTime为UTC格式,c#,timezone,nodatime,C#,Timezone,Nodatime,我要求存储数据库中记录的所有日期必须记录为UTC。到目前为止,我可以通过以下方法使用Noda库实现这一点: public static DateTime NowUtc(string timeZoneId) { var timeZone = GetTimeZone(timeZoneId); var instant = SystemClock.Instance.Now; return instant.InZone(timeZone).T

我要求存储数据库中记录的所有日期必须记录为UTC。到目前为止,我可以通过以下方法使用Noda库实现这一点:

    public static DateTime NowUtc(string timeZoneId)
    {
        var timeZone = GetTimeZone(timeZoneId);
        var instant = SystemClock.Instance.Now;
        return instant.InZone(timeZone).ToDateTimeUtc();
    }
我将验证传递到数据访问层的每个日期必须是UTC格式

我如何做到这一点

谢谢

注意:我已经创建了一个自定义类库,它使用Noda作为核心引擎,并且输出被转换回System.DateTime。

请仔细阅读


我不完全确定你在问什么,但这里有一些提示:

  • 如果您只需要将“now”作为UTC
    DateTime
    ,只需使用
    DateTime.UtcNow

  • 如果您正在使用Noda Time instants并需要一个
    日期时间
    ,只需使用
    instant.ToDateTimeUtc()
    。如果您只需要UTC,那么使用时区是没有意义的

  • 如果要验证
    DateTime
    是否为UTC格式,请检查类型:

    dateTime.Kind == DateTimeKind.Utc
    
  • 您的数据层可能会返回
    DateTimeKind.Unspecified
    类型的
    DateTime
    ,因此您需要先指定UTC类型,然后再转换为Noda Time
    Instant

    DateTime dt = (DateTime) dataReader["YourDataField"];
    DateTime utc = DateTime.SpecifyKind(dt, DateTimeKind.Utc);
    Instant instant = Instant.FromDateTimeUtc(utc);
    
  • 最后,认识到UTC不是一种格式。这是一个时间尺度。因此,值可以“调整为UTC”,或“UTC类型”,但不能是“UTC格式”


当您可以使用
DateTimeOffset.UtcNow
时,为什么要使用本地时间?很抱歉回复太晚,但是+1
DateTime dt = (DateTime) dataReader["YourDataField"];
DateTime utc = DateTime.SpecifyKind(dt, DateTimeKind.Utc);
Instant instant = Instant.FromDateTimeUtc(utc);