建议将时态数据的时间值存储在专用日期字段类型之一中。 这些数据库字段类型专门用于存储时间和日期信息。 与在数值或字符串字段中存储时间相比,这些类型对于查询性能更为有效,且可支持更加复杂的数据库查询。
如果您将时间值存储在字符串或数值(短整型、长整型、浮点型或双精度型)字段中,则可以使用转换时间字段地理处理工具将其转换为日期字段类型。 使用此工具可以指定用来解释日期和时间值的标准或自定义时间格式,并将其转换为日期格式之一。
转换时间字段工具支持标准格式。 然而,对于使用自定义日期和时间格式存储在字符串字段中的时间值,您可以创建用来解释数据的自定义日期和时间格式。 例如,在使用转换时间字段工具将一个存储为字符串形式的时间值“Tuesday, August 20, 2002”转换为日期格式时,请将输入时间格式指定为 dddd, MMMM dd, yyyy。
注:
- 如果使用转换时间字段工具,则支持的标准输入时间格式列表可能会有所不同,具体取决于输入时间值是存储在字符串字段还是数值(短整型、长整型、浮点型或双精度型)字段中。
- 仅当时间值存储在字符串字段中时,才能使用转换时间字段工具来指定自定义日期和时间格式。 当时间值存储在数值字段时,将不支持自定义日期和时间格式。
日期和时间格式字符串
日期和时间格式字符串采用一致的格式包含日期和时间信息。 每个格式字符串都由包含可用格式类型的格式组合构成。 格式类型包括星期、月、小时和秒等。 在单个日期和时间格式字符串中,只应使用每种格式类型中的一种格式。 但是,并非每种格式类型都需要包含在格式字符串中。 例如,在定义日期格式字符串时只使用年、月、日信息而不涉及任何时间信息的做法十分常见。
格式字符串既可以只包含时间信息或日期信息,也可以同时包含日期和时间的组合信息。 此外,格式字符串还可以包含用来分隔格式字符串中所用格式的分隔符,如逗号。
您需要对数据进行分析,从而确定用于解释数据的理想日期和时间格式字符串。 以下示例显示了用于解释日期和时间的各种格式字符串:
日期和时间格式字符串示例
数据值示例 | 格式字符串 |
---|---|
30/05/1978 02:34:56 | dd/MM/yyyy HH:mm:ss |
2/4/2010 2:39:28 PM | M/d/yyyy h:mm:ss tt |
6:05:12 a.m. | h:mm:ss tt |
23:31:18.345 | HH:mm:ss.s |
Tuesday, August 20, 2002 | dddd, MMMM dd, yyyy |
Wed, Aug 31 1994 | ddd, MMM dd yyyy |
03281999030456 | MMddyyyyHHmmss |
2015-07-04T13:11:26.002 | yyyy-MM-ddTHH:mm:ss.sss |
自定义日期和时间格式
自定义格式字符串由一个或多个日期和时间格式说明符组成。 下表汇总了可用来创建解释数据的自定义日期和时间格式的格式说明符:
日期和时间格式说明符
格式说明符 | 格式类型 | 描述 |
---|---|---|
d | 日 | 数字形式的日期,个位数日期无前导零。 |
dd | 日 | 数字形式的日期,个位数日期有前导零。 |
ddd | 星期 | 以三个字母的缩略形式显示的星期。 此函数使用与指定区域设置相关的缩写,例如,“英语(美国)”中的 Mon。 提示:解释数据值时不会对星期进行验证;因此,数据中显示的星期不必非要与数据值中表示的日期正确对应。 |
dddd | 星期 | 以全名显示的星期。 此函数使用与指定区域设置相关的星期全名,例如,“英语(美国)”中的 Monday。 提示:解释数据值时不会对星期进行验证;因此,数据中显示的星期不必非要与数据值中表示的日期正确对应。 |
M | 月 | 数字形式的月份,个位数月份无前导零。 |
MM | 月 | 数字形式的月份,个位数月份有前导零。 |
MMM | 月 | 以三个字母的缩略形式显示的月。 此函数使用与指定区域设置相关的缩写,例如,“英语(美国)”中的 Nov。 |
MMMM | 月 | 以全名显示的月。 此函数使用与指定区域设置相关的月份全名,例如,“英语(美国)”中的 November 和“西班牙语(西班牙)”中的 noviembre。 |
y | 年 | 两位数的年份,但小于 10 的年份没有前导零。 提示:用这种方法表示的年份范围可以从 1950 到 2049。 小于或等于 49 的值将被视为 21 世纪的年份,例如 7 将被视为 2007 年。 大于或等于 50 的值将被视为 20 世纪的年份,例如 67 将被视为 1967 年。 |
yy | 年 | 以末两位数显示的年份,但小于 10 的年份具有前导零。 提示:用这种方法表示的年份范围可以从 1950 到 2049。 小于或等于 49 的值将被视为 21 世纪的年份。 例如,07 会被视为 2007。 大于或等于 50 的值将被视为 20 世纪的年份,例如 67 将被视为 1967 年。 |
yyy | 年 | 以三位数表示的年份。 用这种方法表示的年份范围可以从 1 到 999。 |
yyyy | 年 | 以四位数显示的年份。 |
gg | 纪元 | 时期/年代字符串。 此函数使用与指定区域设置相关的纪元值。 |
T | 时间分隔符 | 此分隔符用于串连上一个日期值和下一个时间值。 函数通常以 ISO 格式显示。 |
h | 小时 | 小时,个位数小时无前导零;12 小时制。 |
H | 小时 | 小时,且单位数小时没有前导零;24 小时制 |
hh | 小时 | 小时,个位数小时有前导零;12 小时制。 |
HH | 小时 | 小时,且单位数小时具有前导零;24 小时制 |
m | 分 | 分钟,个位数分钟无前导零。 |
mm | 分 | 分钟,个位数分钟有前导零。 |
s | 秒 | 秒,个位数秒无前导零。 |
ss | 秒 | 秒,个位数秒有前导零。 |
s.s | 秒 | 秒,包括亚秒,个位数秒无前导零。 尽管此格式只能显示一位小数,但仍可使用任意位数的小数。 警告:亚秒的精度将受到时间字段所支持的数据类型的限制。 例如,如果使用的时间字段数据类型为浮点型或双精度型,则将出现舍入误差。 |
ss.s | 秒 | 秒,包括亚秒,个位数秒有前导零。 尽管此格式只能显示一位小数,但仍可使用任意位数的小数。 警告:亚秒的精度将受到时间字段所支持的数据类型的限制,例如,如果使用的时间字段数据类型为浮点型或双精度型,则将出现舍入误差。 |
t | 时间标记 | 单字符时间标记字符串,例如,A 或 P。 |
tt | 时间标记 | 多字符时间标记字符串,例如,AM 或 PM。 |
z | 时区指示符 | 此后缀表示时间值采用协调世界时间 (UTC) 格式。 函数通常以 ISO 格式显示。 |
分隔符
分隔符是用于分隔文本数据值信息的字符。 常用的分隔符包括逗号 (,)、冒号 (:) 和空格 ( ),但可用于创建格式字符串的分隔符不受任何限制。 您可以创建完全不带任何分隔符的格式字符串,尤其是在解释存储在数值字段中的日期和时间时,因为大部分常用的分隔符都无法在数值字段中存储。
在极少数情况下,包含分隔符的数据与上表中的格式冲突。 在这种情况下,必须使用单引号来隔离格式字符串中的分隔符。 一般来说,单引号可用来隔离格式字符串中的所有分隔符,但除非存在潜在冲突,否则不建议您使用单引号。 以下示例对这些概念进行了说明:
数据值示例 | 格式 | 解释的日期或时间(显示为 MM/dd/yyyy 或 HH:mm:ss) |
---|---|---|
month12day30year2010 | 'month'MM'day'dd'year'yyyy | 12/30/2010 |
30/12/2010 | ddMMyyyy | 12/30/2010 |
Time:18hr6min3sec | 'Time:'h'hr'm'min's'sec' | 18:06:03 |
18:6:3 | HH:m:s | 18:06:03 |
区域设置
区域设置非常重要,因为它们决定着上表中某些数据格式的较长制图表达的有效数据值。 例如,仅当区域设置为英语区域时,才会为 MMMM 对应解释值 November。 在某些情况下,如果格式字符串不使用任何较长的制图表达,则区域设置将与日期解释无关,但区域设置可能会影响 AM 和 PM 指示符的解释。 如果未指定 AM 或 PM 指示符,则将使用区域设置默认的 AM 和 PM 指示符。
区域设置不会影响用于创建格式字符串的格式。 例如,无论何种区域设置,字符 M(或 MM、MMM、MMMM)都表示月份。 以下示例说明了如何使用区域设置来解释日期:
数据值 | 格式字符串 | 区域设置 | 解释的日期 (MM/dd/yyyy) |
---|---|---|---|
November 30, 2010 | MMMM dd, yyyy | 英语(美国) | 11/30/2010 |
Noviembre 30, 2010 | MMMM dd, yyyy | 西班牙语(西班牙) | 11/30/2010 |
Mon, Feb 22, 2010 | ddd, MMM dd, yyyy | 英语(美国) | 2/22/2010 |
30/12/2010 | dd/M/yyyy | 所有区域设置 | 12/30/2010 |
AM 和 PM 指示符
存在每个区域设置的标准时间标记,或 AM 和 PM 指示符。 但是,可自行定义时间标记。 如果格式字符串中存在时间标记(t 或 tt),则必须定义表示该时间标记的字符。 时间标记仅适用于使用 12 小时制 (h 或 hh)的格式字符串。 但并不适用于使用 24 小时制(H 或 HH)的格式字符串。 如果您没有定义自己的时间标记,则将使用所选区域设置的标准时间标记。 要自行定义 AM 和 PM 指示符,时间字段的字段数据类型必须为文本。 以下示例将只使用 PM 指示符来简要说明这些概念。 这些概念对 AM 指示符同样适用:
数据值 | 格式化字符串 | PM 指示符 | 解释的时间 (HH:mm:ss) |
---|---|---|---|
6:12:34 P | h:mm:ss t | P | 18:12:34 |
6:12:34 p.m. | h:mm:ss tt | p.m. | 18:12:34 |
6:12:34 | H:mm:ss | PM | 6:12:34 |
6:12:34 PM | h:mm:ss tt | PM | 18:12:34 |