夏の自由研究はPower関係で何かと思っていましたが、ちょっと日付のフォーマット指定について疑問に思ったので、調べてみた結果を書いていきます。
いつもは yyyy-MM-dd
とか、HH:mm:ss
とかしか使わないのでね。いい機会です。
Power Automateで日付・日時の書式を指定できるのは、下図のアクションと、日時関係の関数 addDays(), addHours(), addMinutes(), addSeconds(), addToTime(), convertFromUtc(), convertTimeZone(), convertToUtc(), formatDateTime(), getFutureTime(), getPastTime(), parseDateTime(), startOfDay(), startOfHour(), startOfMonth(), subtractFromTime(), utcNow()
になります。
フォーマット指定と言っているのは、例えばタイムゾーンの変換アクションに出てくる d, D, f, F
などの文字、あるいは↑に描いたような yyyy
(年) , MM
(月) などの文字列を指しています。
これらフォーマット指定文字 (書式指定子) を設定することによって、アクション/関数の結果を自分の望んだ書式で得ることができます。
例えば 2022-08-12T00:00:00Z
のようなタイムスタンプがあるとして、これを望みの形式 (2022/08/12) のように表示させることができます。
これらのフォーマットはロケールを指定することでも変わってくるんですが、ここでは一旦 en-US に話を絞ります。
ではそれぞれの動作を見ていきましょう。
1文字の書式指定子
.NETで使われる書式指定子が Power Automateでも使われます。いくつか予約されている特別な1文字があって、これを指定することで長々したフォーマット指定を回避できます。
入力する時刻を2022-08-12T13:00:12Z
とすると、以下のように対応します。
書式指定子 | 出力 |
---|---|
d |
8/12/2022 |
D |
Friday, August 12, 2022 |
f |
Friday, August 12, 2022 1:00 PM |
F |
Friday, August 12, 2022 1:00:12 PM |
g |
8/12/2022 1:00 PM |
G |
8/12/2022 1:00:12 PM |
M |
August 12 |
m |
August 12 |
O |
2022-08-12T13:00:12.0000000Z |
o |
2022-08-12T13:00:12.0000000Z |
R |
Fri, 12 Aug 2022 13:00:12 GMT |
r |
Fri, 12 Aug 2022 13:00:12 GMT |
s |
2022-08-12T13:00:12 |
t |
1:00 PM |
T |
1:00:12 PM |
u |
2022-08-12 13:00:12Z |
U |
Friday, August 12, 2022 1:00:12 PM |
Y |
August 2022 |
y |
August 2022 |
o
やO
は本来タイムゾーンのオフセットも含んでくれるんですが (後ろに +09:00 みたいにつく) 今回は入力がUTCなので、そのままZで終わっています。
1文字指定子の場合、大文字と小文字で基本的には別書式になる点に注意が必要ですね。
カスタム指定子
カスタム指定子はいくつかの年月日時間を表す文字を組み合わせて任意の出力を得るための書式指定です。 (最初に書いてた yyyy-MM-dd
がまさにこれ)
カスタム指定子は文字を重ねることでも出力が変わってくるので、単位の大きいものから順に見ていきます。
年を表す文字
書式指定子 | 出力 |
---|---|
yy |
22 |
yyy |
2022 |
yyyy |
2022 |
yyyyy |
02022 |
特に意味があるのは2文字の場合と4文字の場合ですね。 2文字だと年の下2桁になり、4文字で完全な年になります。
月を表す文字
書式指定子 | 出力 |
---|---|
M |
8 ※ |
MM |
08 |
MMM |
Aug |
MMMM |
August |
月は2文字~4文字まですべて出力が異なります。3文字以降は英語表記になっていますね。 また、1文字の場合には0埋めされていない数字が得られますが、カスタム書式は基本的に2文字以上で構成されるため、他の年や日を指定する文字と組み合わせて利用してください。(1文字のMは1文字書式のほうで予約されているので意味が違う)
もしくは最後に書く1文字カスタム指定子のパートをご覧ください。
日を表す文字
書式指定子 | 出力 |
---|---|
d |
12 ※ |
dd |
12 |
ddd |
Fri |
dddd |
Friday |
日を表す文字も先ほどと同様です。3文字以上だと曜日を表してくれます。これを使うと、 M月d日 (ddd)
のようにしていすることで、8月12日 (金) みたいなよく見る書式を得ることもできます。便利!!
なお、先ほどと同様ですが、d一文字を使う場合、他の文字と組み合わせることを忘れないでください。
時間を表す文字
書式指定子 | 出力 |
---|---|
h |
1 ※ |
hh |
01 |
H |
13 ※ |
HH |
13 |
時間を表す指定子は大文字小文字で意味が変わってきます。小文字は12時間表記であるのに対して、大文字が24時間表記になっています。1文字か2文字かは先頭が0埋めされるかどうかの違いになります。
分を表す文字
書式指定子 | 出力 |
---|---|
m |
0 ※ |
mm |
00 |
月と間違いやすい分ですが、1文字と2文字の違いは0埋めのみになります。
秒を表す文字
書式指定子 | 出力 |
---|---|
s |
12 ※ |
ss |
12 |
1文字と2文字の違いは0埋めのみになります。
また秒よりも小さい部分を得る場合にはf
を使います。 f 1個で10分の1秒、ff で 100分の1秒 ...という具合に、fを重ねることで秒より小さいところが得られます。 (HH:mm:ss.ffff
のような使い方ですね)
その他の特殊系
日時以外にも、特殊な文字列を指定することで午前/午後 を得ることもできます。
書式指定子 | 出力 |
---|---|
t |
A または P (en-US) |
tt |
AM または PM (en-US) |
tt |
午前 または 午後 (ja-JP) |
カスタム書式を1文字だけ使う場合の注意
カスタム書式を1文字で使いたい場合 (例えば現在時刻の時だけを0埋めなしで得たいようなケース) では、予約された1文字指定子とかぶってしまうので、必ず先頭に % をつけてください。
例えば 現在時刻の分のみを0埋め無しで取得する場合には %m
を指定することで結果が得られます。誤って m
だけをしていすると、予約済みの1文字指定子の結果August 12
が返ってくるので注意してください。
おわり
ということで、普段あまり気にしない・調べないフォーマット文字について試してみました。
基本のパターンだけ覚えておけばいいと思いますが、特に現在の時・分・秒を個別に取得したいケースなどで、%H
, %m
, %s
などのフォーマットが役立ちそうです。
最後に簡単ですが、ja-JPで表示した場合を載せておきます。
書式指定子 | 出力 |
---|---|
d |
2022/08/12 |
D |
2022年8月12日 |
f |
2022年8月12日 13:00 |
F |
2022年8月12日 13:00:12 |
g |
2022/08/12 13:00 |
G |
2022/08/12 13:00:12 |
M |
8月12日 |
m |
8月12日 |
O |
2022-08-12T13:00:12.0000000 |
o |
2022-08-12T13:00:12.0000000 |
R |
Fri, 12 Aug 2022 13:00:12 GMT |
r |
Fri, 12 Aug 2022 13:00:12 GMT |
U |
2022年8月12日 13:00:12 |
Y |
2022年8月 |
References
Reference guide for expression functions - Azure Logic Apps | Microsoft Docs