16

我要求存储数据库中记录的所有日期必须记录为 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。

4

2 回答 2

40

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

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

  • 如果您正在使用 Noda Time 瞬间并需要一个DateTime,只需使用instant.ToDateTimeUtc(). 如果您只需要 UTC,则使用时区毫无意义。

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

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

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

于 2014-01-27T16:58:25.593 回答
-1

请通过http://msdn.microsoft.com/en-us/library/system.datetimeoffset.aspx

DateTimeOffset localServerTime = DateTimeOffset.Now;

DateTimeOffset utc = localServerTime.ToUniversalTime();

Console.WriteLine("UTC:{0}", utc);
于 2014-01-27T06:32:47.577 回答