将 dateTime 格式化和解析为字符串

本部分提供有关如何使用模型字母字符串指定 dateTime 格式的信息。

当您将日期或时间转换为字符串时,可以应用格式模型来指导转换。这会应用于您将日期或时间格式化为字符串或将字符串解析为日期或时间的时候。

在格式化时(例如,日期时间转换为字符串),用等价值的源来替换模型或标记集。图 1 说明这是怎样应用的。

图 1. 使用模型格式化日期时间源来产生字符串输出。

解析字符串后(例如,将其转换为日期时间),模型或标记的组用来确定哪部分字符串代表哪部分日期时间。图 2 说明这是怎样应用的。

图 2. 使用模型解析字符串源来产生日期时间输出。

语法

表达式模型由以下定义:

   .--------------.
   | .- -.        |
   V V   |        |
  >------+-symbol-+->
         '-string-'

其中:
symbol
是集 adDeEFGhHIkKmMsSTUwWyYzZ 中的字符。
string
是单引号内的字符序列。如果在字符串中要用到单引号,则可以使用双引号,“''”。

格式化为日期时间的字符串字符

下表列出了可用来在模型中格式化或解析成相关日期时间的合法字符。

符号 含义 表示 示例
a 上午或下午标记 文本 输入 am、AM、pm、PM。输出 AM 或 PM
d 一月中的天数(1 - 31) 数字 1、20
dd 一月中的天数(01 - 31) 数字 01、31
D 一年中的天数(1 - 366) 数字 3、80、100
DD 一年中的天数(01 - 366) 数字 03、80、366
DDD 一年中的天数(001 - 366) 数字 003
e 一周中的天数(1 - 7) 数字 26
EEE 一周中的日期 文本 Tue
EEEE 一周中的日期 文本 星期二
F 一月中某一周内的日期(1 - 5) 数字 2(7 月的第二个星期三)3
G 时代 文本 BC 或 AD
h 按上午或下午表示的小时(1 - 12) 数字 6
hh 按上午或下午表示的小时(01 - 12) 数字 06
H 24 小时格式的时间(0 - 23) 数字 77
HH 24 小时格式的时间(00 - 23) 数字 077
I ISO8601 日期/时间(最多 yyyy-MM-dd'T'HH:mm:ss. SSSZZZ) 文本 2004-10-07T12:06:56.568+01:00 5
IU ISO8601 日期/时间(同上,但是如果时区为 +00:00 则 ZZZ 输出为“Z) 文本 2004-10-07T12:06:56.568+01:00, 2003-12 -15T15:42:12.000Z 5
k 每天 24 小时格式的时间(1 - 24) 数字 87
k 每天 24 小时格式的时间(01 - 24) 数字 087
K 按上午或下午表示的小时(0 - 11) 数字 9
KK 按上午或下午表示的小时(00 - 11) 数字 09
m 数字 4
mm 数字 04
M 月(数值) 数字 5、12
MM 月(数值) 数字 05、12
MMM 月(字母) 文本 Jan、Feb
MMMM 月(字母) 文本 1 月、2 月
s 数字 5
ss 数字 05
S 十分之一秒 数字 78
SS 百分之一秒 数字 708
SSS 毫秒 数字 7008
SSSS 1/10,000 th 秒 数字 70008
SSSSS 1/100,000 th 秒 数字 700008
SSSSSS 1/1,000,000 th 秒 数字 7000008
T ISO8601 时间(最多 HH:mm:ss.SSSZZZ) 文本 12:06:56.568+01:005
TU ISO8601 时间(同上,但是 +00:00 时区用“Z”替换) 文本 12:06:56.568+01:00, 15:42:12.000Z5
w 一年中的周数 数字 7、532
ww 一年中的周数 数字 07、532
W 一月中的周数 数字 24
yy 数字 961
yyyy 数字 19961
YY 年:仅与年中的周结合使用 数字 962
YYYY 年:仅与年中的周结合使用 数字 19962
zzz 时区(time zone (简称) 文本 gmt
zzzz 时区(全称) 文本 格林威治标准时间
Z 时区(+/-n) 文本 +3
ZZ 时区(+/-nn) 文本 +03
ZZZ 时区(+/-nn:nn) 文本 +03:00
ZZZU 时区(如同 ZZZ,“+00:00”由“Z”替换) 文本 +03:00、Z
ZZZZ 时区(GMT+/-nn:nn) 文本 GMT+03:00
ZZZZZ 时区(如同 ZZZ,但是无冒号)(+/-nnnn) 文本 +0300
' 文本的转义   “用户文本”
'' 转义文本中的(两个单引号)单引号   'o''clock'

dateTime 对象的表示取决于指定的符号,如下所示:

注: 以下要点说明了上表中的注意事项:
  1. 年是作为特殊情况处理的:
    • 在输出时,如果 y 的计数为 2,则将年截断到 2 位。例如,如果 yyyy 产生 1997,则 yy 产生 97
    • 在输入上,对 2 位数的年份,century window 确定为 53。例如,输入日期 52 将产生年份 2052,而 53 将给出输出年份 1953,97 将给出 1997。
  2. 在 ESQL 中,假定年的第一天是在第一周中,这样 1 月 1 日始终在第 1 周中。这会导致指定的与某年关联的日期实际在别的年份中。例如,使用“EEEE'week 'w' 'YYYY”解析的“Monday week1 2005”将给出日期 2004-12-27,因为 2005 年第一周的星期一实际是 2004 年的日期。

    如果使用 y 符号,则不作调整,对于年终的日期可能会发生不可预测的结果。例如,如果格式化了字符串“2005 01 Monday”:

    • 使用格式字符串“YYYY ww EEEE”的“Monday of week 1 in 2005”被正确解释为 2004 年 12 月 27 日
    • 使用格式字符串“yyyy ww EEEE”的“Monday of week 1 in 2005”被错误解释为 2005 年 12 月 27 日
  3. 2001 年 7 月 11 日是 7 月的第二个星期三,并能用格式字符串 yyyy MMMM EEEE F 表示成 2001 July Wednesday 2。这与“Wednesday in week 2 of July 2001”是不同的,它表示 2001 年 7 月 4 日。
  4. 一个月的第一周和最后一周包括相邻月份的天数。例如,2001 年 7 月 31 日星期二可以表示为 Tuesday in week one of August 2001,而使用格式字符串 yyyy MM W EEEE 则为 2001 08 1 Tuesday
  5. 请参阅 ISO8601,I 和 T 日期时间标记部分。
  6. 在周字段中的日中指定的值确定为:
    • 1 - 星期日
    • 2 - 星期一
    • 3 - 星期二
    • 4 - 星期三
    • 5 - 星期四
    • 6 - 星期五
    • 7 - 星期六
  7. 如果 24 小时字段用不一致的 am/pm 字段指定,则可能变成不明确的时间。
  8. 小数秒 长度必须与输入上的格式符号数隐式匹配。将输出舍入至指定的长度。
  9. 长时区最好在使用洲/城市格式时使用。 类似地,在 Unix 系统上,应该使用洲/城市格式来指定 TZ 环境变量。

ISO8601, I 和 T 日期时间标记

如果您的日期时间值适应 ISO8601:2000 “日期和时间表示”标准,您应该考虑使用格式化标记 I 和 T 是否可能。这些与 ISO8601 标准的子集匹配,特定地:

这些符号只能独立使用。

输出时,将根据逻辑数据类型应用以下格式:

逻辑 MRM 数据类型 逻辑 ESQL 数据类型 输出格式
xsd:dateTime TIMESTAMP 或 GMTTIMESTAMP yyyy-MM-dd'T'HH:mm:ss.SSSZZZ
xsd:date DATE yyyy-MM-dd
xsd:gYear INTERVAL yyyy
xsd:gYearMonth INTERVAL yyyy-MM
xsd:gMonth INTERVAL --MM
xsd:gmonthDay INTERVAL --MM-dd
xsd:gDay INTERVAL ---dd
xsd:time TIME / GMTTIME 'T'HH:mm:ss.SSSZZZ
注:
  • 在输入时,I 和 T 都接受“+00:00”和“Z”来表示与标准世界时(UTC)的零时差,但是在输出时将总是生成“+00:00”。如果您需要在输出是总是生成“Z”,您应该使用备用 IU 或 TU 格式化符号。
  • ZZZ 将总是输出为“+00:00”来表示与标准世界时(UTC)的零时差。如果您需要在输出是总是生成“Z”,您应该使用备用 ZZZU 格式。

在输出时使用输入 UTC 格式

通过使用 Z 字符或时区 +00:00,包含作为字符串的日期时间的逻辑类型 xsd:dateTime 或 xsd:time 的元素或属性可以指定标准世界时(UTC)。在输入时 MRM 解析器会记住此类元素和属性的 UTC 格式。在输出时您可以指定通过使用元素或属性的日期时间格式属性,应该显示 Z 还是 +00:00。或者您可以通过选中消息集属性在输出时使用输入 UTC 格式来保留输入 UTC 格式。如果选中该属性,那么 UTC 格式将保留到输出消息中,并将覆盖日期时间格式属性隐含的格式。

示例

下表显示了一些日期时间格式的示例:

格式化模型 结果
"yyyy.MM.dd'at'HH:mm:ss ZZZ" 1996.07.10 at 15:08:56 -05:00
EEE, MMM d, "yy" Wed, July 10, '96
"h:mm a" 8:08 PM
"hh 'o''clock' a, ZZZZ" 09 o'clock AM, GMT+09:00
"K:mm a, ZZZ" 9:34 AM, -05:00
"yyyy.MMMMM.dd hh:mm aaa" 1996.July.10 12:08 PM
相关概念
消息建模
消息模型
相关任务
开发消息模型
使用消息定义文件
使用消息模型对象
相关参考
消息模型引用信息
消息模型对象属性
CAST 函数
将数字格式化并解析为字符串
支持的类型强制转换
隐式类型强制转换
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ak05616_