我们正在实施PostgreSQL,并且还决定使用NodaTime而不是标准的.NET DateTime。 PostgreSQL有一个“带时区的时间戳”类型,NodaTime通过SystemClock.Instance.Now方法返回带有时区的日期和时间值。但是,SystemClock.Instance.Now(2015-07-17T13:22:52Z)返回的值不能直接写入PostgreSQL字段。是否有处理NodaTime / PostgreSQL实现的最佳实践?
答案 0 :(得分:4)
根据我的理解,"带时区的时间戳"无论如何都是用词不当 - 它只是提供了一个具有本地价值的时区,PostgreSQL将存储UTC" ...换句话说,它实际上是一个额外的转换,而不是存储更多数据。
如果您只是尝试存储Instant
,那么timestamp
应该可以作为数据类型。在获取数据库的值方面,您应该将其转换为DateTimeOffset
,并让驱动程序处理它。您希望在存储时使用Instant.ToDateTimeOffset
,在检索时使用Instant.FromDateTimeOffset
。