验证System.DateTime是否为UTC格式

18

我有一个要求,即数据库中所有记录的日期都必须以协调世界时(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。

2个回答

49

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

  • 如果你只需要一个UTC DateTime来表示“现在”,可以使用 DateTime.UtcNow

  • 如果你正在使用Noda Time实例并需要一个DateTime,只需使用instant.ToDateTimeUtc()。如果你只需要UTC时间,则没有必要使用时区。

  • 如果你想验证一个DateTime是否为UTC时间,则检查其类型:

dateTime.Kind == DateTimeKind.Utc
  • 你的数据层可能会返回 DateTimeDateTimeKind.Unspecified 类型,所以在转换为 Noda Time 的 Instant 之前,需要先指定为 UTC 类型:

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


  • 抱歉回复晚了,但是+1。 - Hendra

    -1

    3
    为什么要使用本地时间,当你可以直接使用 DateTimeOffset.UtcNow 呢? - Jon Skeet

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接