2016-09-29 2 views
1

Я работаю над приложением, которое хранит данные в базе данных SQL Server. Некоторые из них - это момент времени, хранящийся в UTC (например, время записи в журнале), а другие - литеральная дата/время (например, «принимать лекарство X в 16:00 20 июля, независимо от вашего часового пояса»).Отличие между столбцами с UTC и локальным datetime

Проблема в том, что они оба имеют компонент даты и времени, поэтому использование столбца типа datetime2 имеет смысл для обоих. Мы сейчас находимся в ситуации, когда в нашем приложении часто неясно, является ли столбец даты/времени временем UTC или буквальная дата/время

Что является наиболее распространенной практикой различать эти 2 случай я могу думать об этих вариантах:.?

1) Конец всех столбцов UTC в ... МАХ, в то время как буквальный даты/time не имеют специального окончания.

2) Конец всех литералов в столбцах ... Буквы, а столбцы даты/времени UTC не имеют специального окончания.

3) Дайте столбцам UTC тип данных datetime2 и литеральные столбцы даты/времени datetimeoffset.

+0

Вы можете изменить таблицу и добавить новый столбец? например. столбец флагов 'isUTC', который показывает вам, является ли это временем UTC или нет ... – Nebi

+0

Я видел # 1 довольно часто (и использую его сам). Я не видел №2 «в дикой природе». Я бы не предложил № 3 – jleach

ответ

0

Всегда старайтесь сначала использовать подходящий тип, а затем хорошее обозначение. Если datetime2(0) подходит, используйте его.

В моей системе я добавляю суффикс к имени столбца, например: PlaybackStartedLocal datetime2(0), PlaybackStartedUTC datetime2(0). В моем случае я должен хранить как локальные, так и UTC-значения для одного и того же события, потому что некоторые отчеты нуждаются в локальном значении, некоторые UTC, и их очень сложно преобразовать позже.

В общем, хорошей практикой является включение единиц измерения в имя столбца/переменной.

Что вы предпочитаете видеть:

PlaybackDurationMSec   or PlaybackDuration 
LengthMeters/LengthMiles  or Length 

Хорошо известный пример, когда две команды программистов не заметил, что они интерпретировали метрические значения, как имперская и наоборот: A disaster investigation board reports that NASA’s Mars Climate Orbiter burned up in the Martian atmosphere because engineers failed to convert units from English to metric.

Программное обеспечение рассчитало силу, которую необходимы двигатели, необходимые для применения в фунтов силы. Отдельная часть программного обеспечения взяла данные , предполагая, что она находится в метрической единице: ньютоны.

Смежные вопросы