验证System.DateTime是UTC格式

Hen*_*dra 9 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();
    }
Run Code Online (Sandbox Code Playgroud)

我将验证传递到数据访问层的每个日期必须是UTC格式.

我如何实现这一目标?

谢谢

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

Mat*_*int 28

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

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

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

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

    dateTime.Kind == DateTimeKind.Utc
    
    Run Code Online (Sandbox Code Playgroud)
  • 您的数据层可能会返回DateTimeKind.Unspecified各种类型DateTime,因此您需要在转换为Noda Time之前首先指定UTC类型Instant:

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