我要求存储数据库中记录的所有日期必须记录为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。
答案 0 :(得分:25)
我不完全确定你在问什么,但这里有一些提示:
如果你需要的只是"现在"作为UTC DateTime
,只需使用DateTime.UtcNow
。
如果您正在使用Noda Time时刻并需要DateTime
,请使用instant.ToDateTimeUtc()
。如果您只需要UTC,那么使用时区是没有意义的。
如果您想验证DateTime
是否为UTC,请检查类型:
dateTime.Kind == DateTimeKind.Utc
您的数据层可能会返回DateTimeKind.Unspecified
种DateTime
,因此在转换为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);