建议将时态数据的时间值存储在日期字段中。这是一个专用于存储时间和日期信息的特殊数据库字段类型。与在数值或字符串字段中存储时间相比,它对于查询性能极为有效,且可支持更加复杂的数据库查询。
如果您将时间值存储在字符串或数值字段中,则可以使用转换时间字段地理处理工具将这些字符串或数值(短整型、长整型、浮点型或双精度型)字段转换为日期字段。通过转换时间字段工具,您可以灵活地指定用来解释日期和时间值的标准或自定义时间格式图,并将它们转换为可在 ArcGIS 中高效应用的日期格式。向字符串或数值字段存储时间值时,应遵循某种标准的受支持的字符串或数字格式。但有时也可能使用自定义时间格式(例如,Tuesday, August 20, 2002)将时间值存储到字符串字段。
转换时间字段工具所支持的标准格式非常简单易懂。然而,对于使用自定义日期和/或时间格式存储在字符串字段中的时间值,如果要创建用来解释数据的自定义日期和/或时间格式图,则必须先了解以下概念。例如,在使用转换时间字段工具将一个存储为字符串形式的时间值“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 |
1491519015420000 | unix_us |
1390416015335 | unix_ms |
1384616513 | unix_s |
58E6C69F | unix_hex |
日期和时间格式
下表总结了可用来创建解释自定义数据的日期和/或时间格式图的各种格式。
日期和时间格式
格式 | 格式类型 | 描述 |
---|---|---|
d | 日 | 数字形式的每月日期,且单位数没有前导零。 |
dd | 日 | 数字形式的每月日期,且单位数有前导零。 |
ddd | 星期 | 以三个字母的缩略形式显示的星期。此函数使用与指定区域设置相关的缩写,例如,“英语(美国)”中的 Mon。 |
dddd | 星期 | 以全名显示的星期。此函数使用与指定区域设置相关的星期全名,例如,“英语(美国)”中的 Monday。 |
M | 月 | 数字形式的月,且单位数没有前导零。 |
MM | 月 | 数字形式的月,且单位数有前导零。 |
MMM | 月 | 以三个字母的缩略形式显示的月。此函数使用与指定区域设置相关的缩写,例如,“英语(美国)”中的 Nov。 |
MMMM | 月 | 以全名显示的月。此函数使用与指定区域设置相关的月份全名,例如,“英语(美国)”中的 November 和“西班牙语(西班牙)”中的 Noviembre。 |
y | 年 | 两位数的年份,但小于 10 的年份没有前导零。 |
yy | 年 | 以末两位数显示的年份,但小于 10 的年份具有前导零。 |
yyy | 年 | 仅以三位数显示的年份。用这种方法表示的年份范围可以从 1 到 999。 |
yyyy | 年 | 以四位数显示的年份。 |
gg | 纪元 | 时期/年代字符串。此函数使用与指定区域设置相关的纪元值。 |
h | 小时 | 小时,且单位数小时没有前导零;12 小时制 |
H | 小时 | 小时,且单位数小时没有前导零;24 小时制。 |
hh | 小时 | 小时,且单位数小时具有前导零;12 小时制 |
HH | 小时 | 小时,且单位数小时具有前导零;24 小时制。 |
米 | 分 | 分钟,且单位数分钟没有前导零。 |
毫米 | 分 | 分钟,且单位数分钟具有前导零。 |
s | 秒 | 秒,且单位数秒没有前导零。 |
ss | 秒 | 秒,且单位数秒具有前导零。 |
s.s | 秒 | 包含亚秒的秒,且单位数秒没有前导零。尽管此格式只能显示一位小数,但仍可使用任意位数的小数。 |
ss.s | 秒 | 包含亚秒的秒,且单位数秒具有前导零。尽管此格式只能显示一位小数,但仍可使用任意位数的小数。 |
t | 时间标记 | 单字符时间标记字符串,例如,A 或 P。 |
tt | 时间标记 | 多字符时间标记字符串,例如,AM 或 PM。 |
unix_us | Unix 时间 | Unix 时间,以微秒为单位。 |
unix_ms | Unix 时间 | Unix 时间,以毫秒为单位。 |
unix_s | Unix 时间 | Unix 时间,以秒为单位。 |
unix_hex | Unix 时间 | 以十六进制表示的 Unix 时间。 |
分隔符
分隔符是用于分隔文本数据值信息的字符。常用的分隔符包括逗号 (,)、冒号 (:) 和空格 ( ),但可用于创建格式图的分隔符不受任何限制。您也可以在创建格式图时不使用任何分隔符。这通常适用于解释存储在数值字段中的日期和时间,因为大部分常用的分隔符都无法在数值字段中存储。
在极少数情况下,包含分隔符的数据可能与上表中的格式冲突。在这种情况下,必须使用单引号来隔离格式图中的分隔符。一般来说,单引号可用来隔离格式图中的所有分隔符,但除非存在潜在冲突,否则不建议您使用单引号。以下示例对这些概念进行了说明。
数据值示例 | 格式图 | 解释的日期或时间(显示为 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 指示符存在于每个区域设置中。但您也可以使用某些 ArcGIS 工具灵活定义您自己的时间标记。如果格式图中存在时间标记(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 |