C# 验证System.DateTime为UTC格式
我要求存储数据库中记录的所有日期必须记录为UTC。到目前为止,我可以通过以下方法使用Noda库实现这一点:C# 验证System.DateTime为UTC格式,c#,timezone,nodatime,C#,Timezone,Nodatime,我要求存储数据库中记录的所有日期必须记录为UTC。到目前为止,我可以通过以下方法使用Noda库实现这一点: public static DateTime NowUtc(string timeZoneId) { var timeZone = GetTimeZone(timeZoneId); var instant = SystemClock.Instance.Now; return instant.InZone(timeZone).T
public static DateTime NowUtc(string timeZoneId)
{
var timeZone = GetTimeZone(timeZoneId);
var instant = SystemClock.Instance.Now;
return instant.InZone(timeZone).ToDateTimeUtc();
}
我将验证传递到数据访问层的每个日期必须是UTC格式
我如何做到这一点
谢谢
注意:我已经创建了一个自定义类库,它使用Noda作为核心引擎,并且输出被转换回System.DateTime。请仔细阅读
我不完全确定你在问什么,但这里有一些提示:
- 如果您只需要将“now”作为UTC
,只需使用DateTime
DateTime.UtcNow
- 如果您正在使用Noda Time instants并需要一个
,只需使用日期时间
。如果您只需要UTC,那么使用时区是没有意义的instant.ToDateTimeUtc()
- 如果要验证
是否为UTC格式,请检查类型:DateTime
dateTime.Kind == DateTimeKind.Utc
- 您的数据层可能会返回
类型的DateTimeKind.Unspecified
,因此您需要先指定UTC类型,然后再转换为Noda TimeDateTime
:Instant
DateTime dt = (DateTime) dataReader["YourDataField"]; DateTime utc = DateTime.SpecifyKind(dt, DateTimeKind.Utc); Instant instant = Instant.FromDateTimeUtc(utc);
- 最后,认识到UTC不是一种格式。这是一个时间尺度。因此,值可以“调整为UTC”,或“UTC类型”,但不能是“UTC格式”
DateTimeOffset.UtcNow
时,为什么要使用本地时间?很抱歉回复太晚,但是+1
DateTime dt = (DateTime) dataReader["YourDataField"];
DateTime utc = DateTime.SpecifyKind(dt, DateTimeKind.Utc);
Instant instant = Instant.FromDateTimeUtc(utc);