「2024年1月1日」のような日付を含むデータを処理して、データベースのDateTime型の項目に日時データとして格納したい場合がありますよね。そんなときはどうしたらいいでしょうか?
ASTERIA Warpでは扱うデータの日付の書式が統一されていなくても、MapperコンポーネントのStrToDateStd関数を使用することで様々な書式の日時文字列からDateTime型の日時データを生成できます。
本記事では、StrToDateStd関数の基本的な使用方法をご紹介します。
日付の書式の指定
StrToDateStd関数を使用するために、まずは次のような簡単なフローを作成してみましょう。
Mapperコンポーネントをダブルクリックしてマッパーを開きます。続いてマッピングウィンドウ上にStrToDateStd関数を配置し、出力ストリームにつなぎます。
今回は「2024/08/31 23:59:00」といった一般的な形式の日時文字列を処理します。StrToDateStd関数の「日付フォーマット」プロパティに入力値の日付の書式パターンを指定します。今回はデフォルトのフォーマットパターン "yyyy/MM/dd HH:mm:ss"をそのまま使用します。
フローの実行画面の入力ストリームに「2024/08/31 23:59:00」を直接指定してフローを実行します。
フローを実行すると入力文字列「2024/08/31 23:59:00」は「日付フォーマット」プロパティで指定したデフォルトのフォーマットパターン"yyyy/MM/dd HH:mm:ss"で解析され、DateTime型の日時データに変換されて出力されています。出力されたDatetime型の日時文字列が、フロー実行時に入力した日時文字列の年月日と一致していますね。
「日付フォーマット」プロパティに指定できるフォーマットパターンの文字は、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"は、入力データ「2024/08/31 23:59:00」を解析するときに使用します。
それでは、もし月名が「08」ではなく"Aug"のように英語表記の3文字の月名が入力データに含まれているときにはどうすればいいでしょうか。まずStrToDateStd関数の「ロケール」プロパティを「US」に設定し、日付の書式に"MMM"を使用します。例えば、「Aug 31 2024」という入力データからDateTime型の日付データを生成するときには日付の書式に"MMM dd yyyy"を指定します。
※任意の日付の書式を指定するには「日付フォーマット」プロパティにキーボードを使って直接入力してください。
フローの実行画面の入力ストリームに「Aug 31 2024」を直接指定して、フローを実行すると「2024-08-31T00:00:00.000 JST」という結果が得られます。ちゃんと英語の月名文字列の「Aug」が「8」と解析されていますね。
複数の日付の書式を使用する
StrToDateStd関数は異なる日時形式が混在しているような日時文字列を処理することも可能です。今回は前述のフローを使用して、以下のような日付を処理するときの動作を確認します。
08/31/2024
31 Aug 2024
Aug 31 2024
まず、StrToDateStd関数をダブルクリックします。表示される「日付フォーマットプロパティの編集」ダイアログボックスで、「複数の日付フォーマットを使用する」のチェックボックスを選択します。
次に日付の書式に"MM/dd/yyyy"をキーボードを使って直接入力して、「追加」ボタンをクリックします。
同様の手順で日付の書式に"dd MMM yyyy"、"MMM dd yyyy"をそれぞれ追加します。
これで設定は完了したので実際にフローを動かして動作を確認してみましょう。フローの実行画面を開き、入力ストリームに「Aug 31 2024」を直接指定してフローを実行します。この時、StrToDateStd関数は"MMM dd yyyy" の日付パターンで入力値を解析し、「2024-08-31T00:00:00.000 JST」といったDateTime値を出力します。
また、同じようにフローの実行画面の入力ストリームに「08/31/2024」を指定して実行すると、StrToDateStd関数は"MM/dd/yyyy"の日付パターンで入力値を解析します。同じフローなのに別の日付形式も正しく解析できていますね。
より高度な使い方
メールの送信日時を解析する
メール監視の実行設定からメールを受信した場合や、フローの中でPOP3コンポーネントやIMAP4コンポーネントでメールを受信した場合に、メールが送信された日時の文字列を取得することができます。この日時文字列をDateTime型に変換するためには、StrToDateStdコンポーネントの「変換方法」プロパティの値を"メールヘッダー形式"に設定します。
参照
より多くのフォーマットパターンと例については、StrToDateStd関数のヘルプを参照してください。