日付/時刻書式指定子 (Date/Time Format Specifiers)

日付/時刻値は年、月、日、時、分、秒などの要素で構成される文字列であり、その書式は、次の表に掲げる各要素の書式指定子で構成される書式指定文字列で表されます。

FMEの日付/時刻関数のうち @DateTimeParse 関数(任意の書式からFME標準書式への変換)および @DateTimeFormat 関数(FME標準書式から任意の書式への変換)の引数として設定する変換前、変換後の書式は、その書式指定文字列によって指定します。

また、DateTimeConverter トランスフォーマーによる日付/時刻書式の変換は、 @DateTimeParse 関数と @DateTimeFormat 関数を組み合わせて行う任意の書式 –> FME標準書式 –> 任意の書式の変換と同等であり、同トランスフォーマーの Input Format(変換前フォーマット)パラメーターと Output Format(変換後フォーマット)パラメーターにおける書式の設定も書式指定文字列によって行います。

@DateTimeParse 関数と @DateTimeFormat 関数で取り扱いが異なるものがあることに注意してください。

日付/時刻の要素書式指定子と説明@DateTimeParse 関数での使用例@DateTimeFormat 関数での使用例
%Y

4桁の西暦年
0001~9999
@DateTimeParse(2017-01-02,%Y-%m-%d)
= 20170102
@DateTimeFormat(20170102,%Y-%m-%d)
= 2017-01-02

%y####

西暦年の下2桁が一致する年のうち、####(特定の西暦年)を超えない最大の年
例えば %y2059 の場合、00~59 は 2000~2059 と解釈され、60~99 は1960~1999 と解釈される。
@DateTimeParse(17-01-02,%y2020-%m-%d)
= 20170102

@DateTimeParse(17-01-02,%y2010-%m-%d)
= 19170102
(使用不可)

%y

西暦年の下2桁
00~99
(使用不可)@DateTimeFormat(20170102,%y-%m-%d)
= 17-01-02
%m

2桁の月
01~12
@DateTimeParse(2017-01-02,%Y-%m-%d)
= 20170102

区切り文字があれば1桁の1~9も可
@DateTimeFormat(20170102,%Y-%m-%d)
= 2017-01-02

%N

1~2桁の月
1~12
@DateTimeParse(1/2/2017,%N/%e/%Y)
= 20170102

区切り文字が必要
2桁の01~09も可
@DateTimeFormat(20170102,%N/%e/%Y)
= 1/2/2017

%b

月の英略称(3文字)
Jan~Dec
@DateTimeParse(Jan 2 2017,%b %d %Y)
= 20170102
@DateTimeFormat(20170102,%b %d %Y)
= Jan 02 2017

%B

月の英名
January~December
@DateTimeParse(January 2 2017,%B %d %Y)
= 20170102
@DateTimeFormat(20170102,%B %d %Y)
= January 02 2017
%a

曜日の英略称(3文字)
Sun~Sat
(使用不可)@DateTimeFormat(20170102,%a %b %d %Y)
= Mon Jan 02 2017

%A

曜日の英名
Sunday~Saturday
(使用不可)@DateTimeFormat(20170102,%A %B %d %Y)
= Monday January 02 2017

%u

月曜日=1として週の何日目かをを示す1桁の連番
1~7
(使用不可)@DateTimeFormat(20170102,%u)
= 1

%U

年の最初の日曜日から始まる週を01として年内の何週目かを示す2桁の連番
00~53
(使用不可)@DateTimeFormat(20160102,%U)
= 00

@DateTimeFormat(20160103,%U)
= 01

@DateTimeFormat(20171231,%U)
= 53

%w

日曜日=0として週の何日目かを示す1桁の連番
0~6
(使用不可)@DateTimeFormat(20170101,%w)
= 0

%W

年の最初の月曜日から始まる週を01として年内の何週目かを示す2桁の連番
00~53
(使用不可)@DateTimeFormat(20160103,%W)
= 00

@DateTimeFormat(20160104,%W)
= 01

@DateTimeFormat(20181231,%W)
= 53
%d

2桁の日
01~月の最終日
@DateTimeParse(2017-1-2,%Y-%m-%d)
= 20170102

区切り文字があれば1桁の1~9も可
@DateTimeFormat(20170102,%Y-%m-%d)
= 2017-01-02

%e

1~2桁の月
1~月の最終日
@DateTimeParse(1/2/2017,%N/%e/%Y)
= 20170102

区切り文字が必要
2桁の01~09も可
@DateTimeFormat(20170102,%N/%e/%Y)
= 1/2/2017

%j

1月1日を001として年内の何日目かを示す連番
001~365(閏年では366)
@DateTimeParse(20171,%Y%j)
= 20170101

区切り文字があれば1~2桁の1~99も可
@DateTimeFormat(20170101,%Y-%j)
= 2017-001

@DateTimeFormat(20161231,%Y-%j)
= 2016-366
%H

2桁の24時制の時
00~23
@DateTimeParse(08:30,%H:%M)
= 083000

区切り文字があれば1桁の0~9も可
@DateTimeFormat(083000,%H:%M:%S)
= 08:30:00

%k

1~2桁の24時制の時
0~23
@DateTimeParse(8:30,%k:%M)
= 083000

区切り文字が必要
2桁の00~09も可
@DateTimeFormat(083000,%k:%M)
= 8:30

%I (大文字アイ)

2桁の12時制の時
01~12
@DateTimeParse(08:30PM,%I:%M%p)
= 203000

区切り文字があれば1桁の1~9も可
@DateTimeFormat(203000,%I:%M%p)
= 08:30PM

%l (小文字エル)

1~2桁の12時制の時
1~12
@DateTimeParse(8:30PM,%l:%M%p)
= 203000

区切り文字が必要
2桁の01~09も可
@DateTimeFormat(203000,%l:%M%p)
= 8:30PM

%p

午前、午後の別
AM/PM
@DateTimeParse(12:30am,%I:%M%p)
= 003000

大文字と小文字は区別しない
@DateTimeFormat(083000,%I:%M%p)
= 08:30AM
%M

2桁の分
00~59
@DateTimeParse(8:30,%H:%M)
= 083000

区切り文字があれば1桁の0~9も可
@DateTimeFormat(083000,%H:%M:%S)
= 08:30:00
%S

整数部が2桁の秒(ナノ秒精度の小数部もサポートする)
00~59
@DateTimeParse(8:30:01.234,%H:%M:%S)
= 083001.234
@DateTimeFormat(083059.123,%H:%M:%S)
= 08:30:59.123

%s

Unixエポック(1970-01-01 00:00:00+00:00)からの経過秒数(ナノ秒精度の小数部もサポートする)。
書式指定子 %z, %Ez との併用はできない。
@DateTimeParse(1.234,%s)
= 19700101000001.234+00:00

変換結果の日付時刻のタイムゾーンは常にUTCで、タイムゾーンサフィクス(+00:00)がつく。
@DateTimeFormat( 19700101000001.234+00:00,%s)
= 1.234

変換前の日付時刻にはタイムゾーンサフィクスがついていなければならない。

%Es

同上。ただし、使用例欄に注記したように、タイムゾーンサフィックスの取り扱いが異なる。
@DateTimeParse(1.234,%Es)
= 19700101000001.234

変換結果の日付時刻のタイムゾーンは常にUTCだが、タイムゾーンサフィクス(+00:00)はつかない。
@DateTimeFormat( 19700101000001.234,%Es)
= 1.234

変換前の日付時刻にはタイムゾーンサフィクスがついていてはならず、常にUTCと解釈される。
タイムゾーン%z

タイムゾーンサフィクス
+/-hh:mm
@DateTimeParse(8:30+09,%H:%M%z)
= 083000+09:00

+/-hhmm, +/-hh または Z(+00:00と同義)も可。
@DateTimeFormat(000000+09:00,%H:%M:%S%z)
= 00:00:00+09:00

%Ez

同上。ただし、使用例欄に注記したように、@DateTimeFormat関数による変換結果においてUTCのタイムゾーンは Z で表される。
@DateTimeParse(03:04:05Z,%H:%M:%S%Ez)
= 030405+00:00

+/-hhmm, +/-hh, または Z(+00:00と同義)も可
@DateTimeFormat(030405+00:00,%H:%M:%S%Ez)
= 03:04:05Z

UTCのタイムゾーンは Z で表される(+00:00ではない)。
ショートカット%T

%H:%M:%S と同義
@DateTimeParse(03:04:05,%T)
= 030405
@DateTimeFormat(000000,%T)
= 00:00:00

FME

FMEの標準日付/時刻書式
%Y%m%d$
%H%M%S$
%H%M%S%Ez$
%Y%m%d%H%M%S$
%Y%m%d%H%M%S%Ez$
@DateTimeParse(20170102,FME)
= 20170102

@DateTimeParse(030405+0900,FME)
= 030405+09:00
@DateTimeFormat(20170102,FME)
= 20170102

@DateTimeFormat(030405+09,FME)
= 030405+09:00

ISO

ISOの標準日付/時刻書式
%Y-%m-%d$
%H:%M:%S$
%H:%M:%S%Ez$
%Y-%m-%dT%H:%M:%S$
%Y-%m-%dT%H:%M:%S%Ez$
@DateTimeParse(2017-01-02,ISO)
= 20170102

@DateTimeParse(03:04:05+09:00,ISO)
= 0300405+09:00
@DateTimeFormat(20170102,ISO)
= 2017-01-02

@DateTimeFormat(20170102030405+09,ISO)
= 2017-01-02T03:04:05+09:00

FME|ISO
ISO|FME

FMEまたはISOの標準日付/時刻書式
@DateTimeParse(20170102,FME|ISO)
= 20170102

@DateTimeParse(2017-01-02,FME|ISO)
= 20170102

@DateTimeParse(030405+0900,FME|ISO)
= 030405+09:00

@DateTimeParse(03:04:05+09:00,FME|ISO)
= 0300405+09:00
| の前に記述したショートカット(FME、ISOのどちらか一方)と同義。

@DateTimeFormat(20170102,FME|ISO)
= 20170102

@DateTimeFormat(20170102,ISO|FME)
= 2017-01-02
ワイルドカード*

スペースで区切られた任意の単語(単語の直後にカンマなどの区切り文字がついている場合はそれを含む)
@DateTimeParse(“On Monday, January 23 2017″,”* * %B %d %Y”)
= 20170123

@DateTimeParse(“On Monday, January 23 2017″,”* *, %B %d %Y”)
= 20170123
文字「*」として扱われる。

?

任意の一文字
@DateTimeParse(January 23rd 2017,%B %d?? %Y)
= 20170123

@DateTimeParse(LC80460262015110LGN00,LC???????%Y%jLGN??)
= 20150420
文字「?」として扱われる。

$

文字列の末尾
@DateTimeParse(2017-01-02,%Y-%m-%d$)
= 20170102
文字「$」として扱われる。
特殊文字%%

文字「%」
@DateTimeParse(2017%01%05,%Y%%%m%%%d)
= 20170105
@DateTimeFormat(020304,%T %%)
= 02:03:04 %

%*

文字「*」
@DateTimeParse(*** 2017-01-05,%*%*%* %Y-%m-%d)
= 20170105
(使用不可)

%?

文字「?」
@DateTimeParse(On Jan 2 2017?,* %b %d %Y%?)
= 20170102
(使用不可)

%$

文字「$」
@DateTimeParse(2017$01$02,%Y%$%m%$%d)
= 20170102
(使用不可)
一般文字ワイルドカード、特殊文字以外の任意の文字(英大文字と小文字は区別される)@DateTimeParse(On Jan 23 2017, On %b %d %Y)
= 20170123
@DateTimeFormat(20170102,On %B %d %Y)
= On January 02 2017