DateTime型の値をそのまま文字列として出力すると「2024-07-09T19:38:17.156」のような一般的には使用しない形式の文字列になります。これを「2024年7月9日」のような読みやすい文字列に整形したい場合はどうすればよいでしょうか? FormatDateStd関数を使用すると、DateTime型の値を指定した日時フォーマットで整形して文字列として出力できます。
この記事では、FormatDateStd関数の基本的な使い方を説明します。
出力するフォーマットの指定
FormatDateStd関数を使用するために、まずは次のような簡単なフローを作成してみましょう。
Mapperコンポーネントをダブルクリックしてマッピングウィンドウ上にマッパー関数を配置します。ここでは次の画像のように、Now関数とFormatDateStd関数を配置し、出力ストリームにつなぎます。
FormatDateStd関数の「日付フォーマット」プロパティにDateTime型の値を整形するためのフォーマットパターンを指定します。今はデフォルトのフォーマットパターン "yyyy/MM/dd HH:mm:ss"をそのまま使用します。
フローを実行すると、現在日時が、「日付フォーマット」プロパティで指定したデフォルトのフォーマットパターンで整形されて出力されましたね。
「日付フォーマット」プロパティに指定できるフォーマットパターンの文字は、Javaで使用されているものと同じパターンの文字です。以下に、一般的に使用されるパターン文字と例を示します。
記号 | 意味 | 例 |
---|---|---|
G | 西暦の場合は紀元、和暦の場合は元号(令和、平成など) | AD、令和 |
y | 年 | 2003,03 |
M | 月 | 7月; 7; 07 |
d | 日 | 10 |
h | 12時制 (1-12) | 11 |
H | 24時制(0-23) | 0 |
m | 分 | 45 |
s | 秒 | 54 |
S | ミリ秒 | 955 |
E | 曜日 | 火曜日; 火 |
a | 午前/午後 | PM |
先ほど「日付フォーマット」プロパティで使用したパターン "yyyy/MM/dd HH:mm:ss"は、Now関数が出力する現在日時のDateTime型の値を整形するために使用されています。それでは、上記の表と見比べてみましょう。最初の"yyyy"は、表を見ると「y」が「年」となっているので、4つの「y」で4桁の年、つまり"2024"のような年の文字列になります。もしも「yy」のように「y」が2つだった場合は、年の下2桁である"24"という文字列になります。このように、パターン文字の桁数によって出力される文字列が変わってきますので想定通りの出力になるかいろいろ試してみてください。
また、「日付フォーマット」プロパティはリストから選択するだけでなく、直接文字列を入力することができます。フォーマット文字列の部分をマウスでクリックするとカーソルが表示されますので、後はキーボードで文字列を編集することができます。
元号を出力する
次に元号はどのようにすれば出力できるでしょうか?
上の表を見ると「G」を使えばできそうなので、「日付フォーマット」プロパティでリストから"GGGGyy年M月d日H時m分s秒"を選択してフローを実行してみます。あれ? 元号ではなく"西暦24年7月9日19時38分17秒"のような文字列が出力されますね。。。
パターン文字列に「G」を使うことは正解なのですが、実はそれだけでは元号は出力できません。もう1つ、「和暦を使用する」プロパティを"はい"にする必要があります。
このように指定してからフローを実行すると、
おおっ!元号が出力されました!
パターン文字列の「G」を1つにすると、「令和」の英語表記1文字である"R"が出力されますよ。
月を英語表記にする
今度は月を英語表記にしてみましょう。7月の英語表記は"Jul"なので、7月9日は"Jul 09"のように表記することがありますね。これはどのようにすれば出来るでしょうか?
"7"ではなく"Jul"のように英語表記の月名頭3文字を出力するには、パターン文字列として"MMM"を使用します。そこで"MMM dd"というパターン文字列を指定すると、"Jul 09"という文字列が出力されます。おっと、"7 09"のように数字になりました? その場合は、「ロケール」プロパティの値を"US"に変更する必要があります。
上記のように設定してフローを実行すると、
ちゃんと月が英語表記になりましたね。
「ロケール」プロパティはどの国の日時文字列に変換するかを指定するプロパティなのです。「ロケール」を"FRANCE"とか別の国に変更すると、違う文字列が出力されて面白いですよ。また、"Jul"ではなく "July"のように月を完全な英語表記にしたい場合は”MMMM"を使用します。
参照
さらなるパターン文字列やその例、そして注意事項についてはFormatDateStd関数のヘルプを参照してください。