验证System.DateTime是UTC格式

时间:2014-01-27 06:25:12

标签: c# timezone nodatime

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

答案 0 :(得分:25)

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

  • 如果你需要的只是"现在"作为UTC DateTime,只需使用DateTime.UtcNow

  • 如果您正在使用Noda Time时刻并需要DateTime,请使用instant.ToDateTimeUtc()。如果您只需要UTC,那么使用时区是没有意义的。

  • 如果您想验证DateTime是否为UTC,请检查类型:

    dateTime.Kind == DateTimeKind.Utc
    
  • 您的数据层可能会返回DateTimeKind.UnspecifiedDateTime,因此在转换为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 :(得分:0)

请浏览http://msdn.microsoft.com/en-us/library/system.datetimeoffset.aspx

DateTimeOffset localServerTime = DateTimeOffset.Now;

DateTimeOffset utc = localServerTime.ToUniversalTime();

Console.WriteLine("UTC:{0}", utc);