Кажется, что это должен быть очевидный вопрос, но у меня были некоторые проблемы, которые нашли хороший ответ. Я создаю приложение n-уровня, которое должно быть чувствительным к времени UTC. Значения могут обновляться, и когда они записываются в метку времени. Это включает транзакции в базе данных, где обновления или вставки будут влиять на столбцы datetime.
Чтобы дать некоторый контекст, я использую SQL 2008 R2 + с DATETIMEOFFSET (2) для большинства моих столбцов datetime. Я рассматриваю возможность добавления обновлений временных меток в Хранимые процедуры, чтобы они не пропускались через сеть. Это позволит сэкономить пропускную способность по мере роста системы, что является хорошей вещью... и может использоваться для проверки того, будут ли изменения данных (сначала выигрыши) в общих данных. Нижняя сторона заключается в том, что первым, кто отправит транзакцию, может быть не тот, кто выигрывает, если они натолкнутся на более медленное время отклика на свой экземпляр приложения.
Каков идеальный или рекомендуемый способ обработки данных времени UTC в этом контексте?
- Установите его в SPROC с помощью SYSUTCDATETIME() ИЛИ...
- Установите его в приложении с помощью функции DateTimeOffset.Now или DateTime.UtcNow
Если два выше, было бы рекомендовано запустить это на уровне презентации и передать его через службу на уровень домена или просто установить, когда он попадет в домен на задней стороне службы?
Как вы можете видеть, здесь есть много вариантов, и я склоняюсь к базе данных... но я был бы признателен за любые советы или слова предупреждения, прежде чем я продолжу строить эту штуку.
Боковое примечание: я также отслеживаю геопространственную информацию... но это не сложная система реального времени. Пользовательское время более чем достаточно.
UPDATE: я использую DateTimeOffset в приложении. Мое исследование привело меня к тому, что я обнаружил, что вы "можете надежно сравнить любые буксировки DateTimes, сначала называя ToUniversalTime на каждом из них. Эта стратегия терпит неудачу, если (и только если) точно один из них имеет DatTimeKind" Unspecified ". причина предпочтения DateTimeOffset" - С# 4.0 В двух словах, книги O'Riely.