区分具有UTC和本地日期时间的列

时间:2016-09-29 11:49:38

标签: sql sql-server utc

我在一个将日期时间存储在SQL Server数据库中的应用程序上工作。其中一些是以UTC格式存储的时间点(例如日志项目日期时间),而其他时间是文字日期/时间(例如"在7月20日下午4点服用药物X,无论您的时区如何)。 / p>

问题是这两者都有一个日期和时间组件,因此使用datetime2列类型对两者都有意义。我们现在的情况是,我们的应用程序中通常不清楚日期/时间列是UTC时间点还是文字日期/时间。

区分这两种情况最常见的做法是什么?我可以想到这些选择:

1)结束... Utc中的所有UTC列,而文字日期/时间列没有特殊结尾。

2)结束... Literal中的所有文字列,而UTC日期/时间列没有特殊结尾。

3)为UTC列提供数据类型datetime2和文字日期/时间列datetimeoffset。

1 个答案:

答案 0 :(得分: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.

  

该软件计算了推进器需要施加的力   磅力。一个单独的软件接收了数据   假设它是公制单位:牛顿。