如果应用程序使用NodaTime,我应该如何在SQL DB中保留时间戳?

前端之家收集整理的这篇文章主要介绍了如果应用程序使用NodaTime,我应该如何在SQL DB中保留时间戳?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在我的应用程序中开始使用NodaTime来管理时间,瞬间和一般的时间本地化.

有时我将时间戳记存储到sql Server 2008数据库.我传统上使用UTC的datetime2字段.这些时间戳将使用Noda创建.似乎这个日期转换为Noda的Instant可能是不受欢迎的.

我应该用什么类型来坚持?

如果我在sql中使用非整数,那么我的应用层和我的DAL之间有潜在的转换问题.但是,如果我保持整数Noda即时,我将具有相同层之间的逻辑耦合…我将无法在sql中执行简单的日期聚合,而不会将其带入应用层或CLR.

Noda在UTC时间内无法可靠地描述时间,因为某些时候从来没有发生在UTC.

解决方法

datetime2是一个完全可以接受和正常的sql类型来存储Instant.使用Instant.ToDateTimeUtc方法获取一个DateTime,然后将其存储在sql中.同样,您可以在从sql检索值时使用Instant.FromDateTimeUtc方法.

或者,如果要显式地显示值是基于UTC(偏移量始终为零),则可以使用sql datetimeoffset类型.有即时即可使用ToDateTimeOffset和FromDateTimeOffset方法.

你说:

Noda makes the case that instants can’t reliably be described in UTC,since certain times never occurred in UTC.

我想也许你被赶上了the user guide年的措辞.我可以看到它会如何引导你走上这条思路.虽然逻辑上一个Instant并不代表UTC,但它肯定可以用UTC来可靠地描述.也可以用其他一些术语来描述,只要这些术语是明确的.

用户指南所做的一点是,其他不在UTC的值仍然可以转换为Instant.例如,我可能有一个OffsetDateTime,或者一个具有与零不同的偏移量的DateTimeOffset,并且仍然可以将其调整为零以形成Instant.同样,我可能有一个分配给UTC时区或其他时区的ZonedDateTime,我仍然可以恢复到单个通用即时而不会失去保真度.

DateTime(除非它有DateTimeKind.Utc)或LocalDateTime,LocalDate,LocalTime等都不能说同样的,没有一个是明确的一个时刻.

至于其他的映射:

Noda Time      | .NET BCL                   | sql Server
---------------|----------------------------|------------------------------------------
Instant        | DateTime or DateTimeOffset | datetime2 or datetimeoffset
OffsetDateTime | DateTimeOffset             | datetimeoffset
LocalDateTime  | DateTime                   | datetime2
LocalDate      | DateTime                   | date
LocalTime      | TimeSpan                   | time
Duration       | TimeSpan                   | int or bigint (Ticks,TotalSeconds,etc.)
Period         | String                     | varchar
ZonedDateTime  | DateTimeOffset + String    | datetimeoffset + varchar (or a UDT)
原文链接:https://www.f2er.com/mssql/76060.html

猜你在找的MsSQL相关文章