这似乎应该是一个显而易见的问题,但我在找到一个好的答案时遇到了一些问题。我正在构建一个需要对 UTC 时间敏感的 n 层应用程序。可以更新值并记录时间戳。这包括数据库中的事务,其中更新或插入将影响日期时间列。
为了给出一些上下文,我对我的大多数日期时间列使用带有 DATETIMEOFFSET(2) 的 SQL 2008 R2 +。我正在考虑将时间戳的更新放入存储过程中,这样它们就不需要通过网络传递。随着系统的增长,这将节省带宽,这是一件好事......并且可用于验证共享数据上的数据是否更改(首先获胜)。不利的一面是,如果他们在应用程序实例上遇到较慢的响应时间,则第一个提交事务的人可能不是获胜者。
在这种情况下处理 UTC 时间数据的理想或推荐方法是什么?
- 使用 SYSUTCDATETIME() 或 ... 在 SPROC 中设置它
- 使用 DateTimeOffset.Now 或 DateTime.UtcNow 在应用程序中设置它
如果以上两个,是否建议在表示层触发它并将其通过服务传递到域层,或者只是在它到达服务后端的域时设置它?
正如你所看到的,这里有很多选择,我倾向于数据库......但在我继续构建这个东西之前,我会很感激任何建议或警告的话。
旁注:我也在跟踪地理空间信息……但这不是一个硬实时系统。用户实时是绰绰有余的。
更新:我将在应用程序中使用 DateTimeOffset。我的研究使我发现,您“可以通过首先在每个日期上调用 ToUniversalTime 来可靠地比较任何两个 DateTime。当(且仅当)其中一个具有“未指定”的 DatTimeKind 时,此策略失败。他失败的可能性是另一个青睐 DateTimeOffset 的原因” - C# 4.0 简而言之,O'Riely 书籍。