# TalendDateルーチン

[TalendDate]ルーチンには、さまざまな種類の操作を実行し、日付式の形式について確認できるファンクションが複数含まれています。

情報メモ警告: パターンがyyyy-MM-ddかyyyy-MM-dd HH:mm:ssに設定されている場合を除き、これらのファンクションでは内部で[SimpleDateFormat](https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html#number)というJavaクラスが使用されています。この場合、パフォーマンス向上のため、入力された日付文字列の形式チェックは行われません。この2つのパターンのいずれかを使う場合は、入力された日付文字列が、設定されたパターンと正確に一致することを確認する必要があります。

[Repository] (リポジトリー)ツリービューにあるシステムルーチンフォルダーの下の[TalendDate]ノードをダブルクリックすると、これらのファンクションにアクセスできます。

TalendDateルーチンのファンクションTalendDateTalendDateルーチンのファンクション

| ファンクション | 説明 | 構文 |
| --- | --- | --- |
| addDate | n日、nか月、n時間、n分またはn秒をJavaの日付に追加し、新しい日付を返します。<br><br>日付形式は:yyyy、MM、dd、HH、mm、ss、SSSです。 | TalendDate.addDate("initial date string", ["date format - eg.: yyyy/MM/dd"], integer n,"format of the part of the date to which n is to be added - eg.:yyyy"). |
| compareDate | 指定した形式に従って2つの日付のすべての部分を比較します。日付が同一の場合は0を、最初の日付が早い場合は-1を、2番目の日付が早い場合は1を返します。<br><br>patternパラメーターは日付形式(たとえば、"yyyy-mm-dd")を指定します。 | TalendDate.compareDate(Date date1, Date date2,[String pattern]) |
| diffDate | 指定した比較パラメーターに従って、年、月、日、時間、分、秒またはミリ秒に関して2つの日付の差を返します。<br><br>dateTypeパラメーターは、比較される日付部分の形式を指定します。有効値は、"yyyy"、"MM"、"dd"、"HH"、"mm"、"ss"、"SSS"です。デフォルト値は"dd"です。<br><br>ignoreDSTパラメーターは、DST(夏時間)を考慮する必要があるかどうかを指定します。 | TalendDate.diffDate(Date date1, Date date2,[String dateType],[boolean ignoreDST])<br><br>たとえば、TalendDate.diffDate(TalendDate.parseDate("yyyy-MM-dd", "2022-12-01"), TalendDate.parseDate("yyyy-MM-dd", "2022-10-02"), "MM")は2を返します。 |
| diffDateFloor | 指定した比較パラメーターに従って、年または月に関して2つの日付の差を返します。値は最も近い整数に切り捨てられます。<br><br>dateTypeパラメーターは、比較される日付部分の形式を指定します。有効値は"yyyy"、"MM"です。 | TalendDate.diffDateFloor(Date date1, Date date2, String dateType)<br><br>たとえば、TalendDate.diffDateFloor(TalendDate.parseDate("yyyy-MM-dd", "2022-12-01"), TalendDate.parseDate("yyyy-MM-dd", "2022-10-02"), "MM")は1を返します。 |
| diffDateIgnoreDST | 指定した比較パラメーターに従って、DSTを無視して、日、月、または年に関して2つの日付間の差を返します。<br><br>dateTypeパラメーターは、比較される日付部分の形式(たとえば、"yyyy")を指定します。 | TalendDate.diffDateIgnoreDST(Date1(), Date2(),[String dateType]) |
| formatDate | 指定した形式に対応する日付文字列を返します。 | TalendDate.formatDate("date format - eg.: yyyy-MM-dd HH:mm:ss", Date() to be formatted) |
| formatDateInTimeZone | 特定のタイムゾーンで、日付を特定の形式(日時文字列)にフォーマットします。 | TalendDate.formatDateInTimeZone(String datePattern, Date tate, String TimeZoneID) |
| formatDateInUTC | UTCタイムゾーンで、日付を特定の形式(日時文字列)にフォーマットします。 | TalendDate.formatDateInUTC(String datePattern, Date tate, String TimeZoneID) |
| formatDateLocale | 対象の国で使用されている形式に従って、日付を日付/時間文字列に変更します。 | TalendDate.formatDateLocale("format target", java.util.Date date, "language or country code") |
| formatDatetimeoffset | (yyyy-MM-dd HH:mm:ss.SSSXXX)というローカルタイムゾーン形式(JDK7がサポート)であるMSSQL 2008タイプのdatetimeoffset ISO 8601文字列に日付をフォーマットします。 | TalendDate.formatDatetimeoffset(Date date) |
| getCurrentDate | 現在の日付を返します。入力パラメーターは必要ありません。 | TalendDate.getCurrentDate() |
| getDate | 指定された形式(オプション)で現在の日付と時間を返します。この文字列には、固定文字列または日付にリンクされた変数を含めることができます。デフォルトでは、文字列はDD/MM/CCYYの形式で返されます。 | TalendDate.getDate("Format of the string - ex: CCYY-MM-DD") |
| getFirstDayOfMonth | イベントの日付を現在の月の初日に変更し、新しい日付を返します。 | TalendDate.getFirstDayMonth(Date) |
| getLastDayOfMonth | イベントの日付を現在の月の末日に変更し、新しい日付を返します。 | TalendDate.getLastDayMonth(Date) |
| getPartOfDate | 指定した形式に従って日付の一部を返します。この文字列には、固定文字列または日付にリンクされた変数を含めることができます。 | TalendDate.getPartOfDate("String indicating the part of the date to be retrieved, "String in the format of the date to be parsed") |
| getRandomDate | ISO形式でランダムな日付を返します。 | TalendDate.getRandomDate("format date of the character string", String minDate, String maxDate) |
| isDate | 日付文字列が指定した形式に対応しているかどうかを確認します。結果に従って、trueまたはfalseのBoolean値を返します。 | TalendDate.isDate(Date() to be checked, String pattern, [boolean ignoreTimeZone])<br><br>このpatternによって、チェックする日付の形式が指定されます。例: yyyy-MM-dd HH:mm:ss |
| isDateStrict | 厳密なルールを使って、正しいパータンの日付として文字列値をテストします。この検証はJava 8タイムツールを使用します。タイムゾーンオフセットの範囲は-18:00から18:00までに制限されています。stringDateが正しいパターンの日付文字列であるかどうかを示すブール値を返します。 | TalendDate.isDateStrict(String stringDate, String pattern) |
| parseDate | 文字列を日付に変更します。指定された形式で日付を返します。 | TalendDate.parseDate("format date of the string to be parsed", "string in the format of the date to be parsed",["boolean about whether parsing is set to be lenient, that is to say, accepting the heuristic match with the format"]) |
| parseDateInUTC | 文字列をUTCの日付に変更します。UTC形式で日付を返します。<br><br><ul>利用対象:<li>対象製品：</li><li>Big Data</li><li>Big Data Platform</li><li>Cloud Big Data</li><li>Cloud Big Data Platform</li><li>Cloud Data Fabric</li><li>Data Fabric</li><li>Qlik Talend Cloud Enterprise Edition</li><li>Qlik Talend Cloud Premium Edition</li><li>Real-Time Big Data Platform</li></ul><br><br>本番環境で実行しているビッグデータジョブでは、異なるタイムゾーンで設置されている複数のマシンが関わるため、日時解析の正しい出力を確実に行うために、常にこのルーチンを使用する必要があります。 | TalendDate.parseDateInUTC("format date of the string to be parsed", "string in the format of the date to be parsed", ["boolean about whether parsing is set to be lenient, that is to say, accepting the heuristic match with the format"]) |
| parseDateLocale | 指定した形式に従って文字列を解析し、日付を抽出します。指定したローカル形式に従って日付を返します。 | TalendDate.parseDateLocale("date format of the string to be parsed", "String in the format of the date to be parsed", "code corresponding to the country or language") |
| setDate | 指定した日付の部分と値および指定した形式に従って日付の一部を変更します。 | TalendDate.setDate(Date, whole n, "format of the part of the date to be modified - eg.:yyyy") |
| TO\_CHAR | 日付を文字列に変換します。 | TalendDate.TO\_CHAR(date[,format])<br><br><ul> <li> <span>[date] (日付)</span>: 文字列に変換する日付の値。</li> <li> <span>[format] (形式)</span>: 戻り値の形式を定義する文字列。</li> </ul> |
| TO\_DATE | 文字列を日付/時刻のデータ型に変換します。 | TalendDate.TO\_DATE(string[, format])<br><br><ul> <li> <span>[string] (文字列)</span>: 日付/時刻のデータ型に変換する文字列。</li> <li> <span>[format] (形式)</span>: <span>string</span>引数の一部に一致する形式文字列。指定されていない場合、<span>string</span>の値は<span>MM/dd/yyyy HH:mm:ss.SSS</span>という日付形式であることが必要です。</li> </ul><br><br>たとえば、TalendDate.TO\_DATE("04/24/2017 13:55:42.123")によりMon Apr 24 13:55:42 CST 2017が返されます。 |
| ADD\_TO\_DATE | 日時の値の一部に指定の数量を追加し、ユーザーがファンクションに渡す日付と同じ形式で日付を返します。 | TalendDate.ADD\_TO\_DATE(date, format, amount)<br><br><ul> <li> <span>[date] (日付)</span>: 変更する日付の値。</li> <li> <span>[format] (形式)</span>: 変更する日付の値の一部を指定する形式文字列。<ul> <li>年に使用できる有効な形式文字列: <span>Y</span>、<span>YY</span>、<span>YYY</span>、<span>YYYY</span></li> <li>月に使用できる有効な形式文字列: <span>MONTH</span>、<span>MM</span>、<span>MON</span></li> <li>日に使用できる有効な形式文字列: <span>D</span>、<span>DD</span>、<span>DDD</span>、<span>DAY</span>、<span>DY</span></li> <li>時に使用できる有効な形式文字列: <span>HH</span>、<span>HH12</span>、<span>HH24</span></li> <li>分に使用できる有効な形式文字列: <span>MI</span></li> <li>秒に使用できる有効な形式文字列: <span>SS</span></li> <li>ミリ秒に使用できる有効な形式文字列: <span>MS</span></li> </ul> </li> <li> <span>[amount] (数量)</span>: 日付の値の変更に使用する年、月、日、時などの数を指定する整数値。</li> </ul><br><br>例:<br><br>TalendDate.getCurrentDate()でMon Apr 24 14:26:03 CST 2017が返される場合、<br><br>TalendDate.ADD\_TO\_DATE(TalendDate.getCurrentDate(), "YY", 1)ではTue Apr 24 14:26:03 CST 2018が返されます。 |

情報メモ警告:

日付形式の"yyyy"と"YYYY"は大半の場合、同じ年の数字を返しますが、"YYYY"が次の位置で使われると想定どおりに機能しないことがあります。

* 年の最初の週。年が週の最初の日で開始しない場合。
* 年の最後の週。年が週の最後の日で終了しない場合。

たとえば、2016年1月2日の3日前の日付がどうなるかを計算する場合、次のコードは間違った日付を返します。

```
System.out.println(TalendDate.formatDate("YYYY-MM-dd", TalendDate.addDate(TalendDate.TO_DATE("01/02/2016 08:10:30.123"), -3, "dd")));
```

他方、次のコードは想定どおりに機能します。

```
System.out.println(TalendDate.formatDate("yyyy-MM-dd", TalendDate.addDate(TalendDate.TO_DATE("01/02/2016 08:10:30.123"), -3, "dd")));
```

したがって、通常は"yyyy"を使用してください。これは暦年を表します。

## 日付をフォーマットする

formatDateルーチンは、tJavaコンポーネントと共に簡単に使用できます。

```
System.out.println(TalendDate.formatDate("dd-MM-yyyy", new Date()));
```

現在の日付はnew Date()Javaファンクションによって指定されたパターンに従って初期化され、[Run] (実行)ビューに表示されます。

![結果は、\[Run\] (実行)ビューで2010-02-25 17:28:07となります。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/routines14_b.png)

## 日付の確認

isDateルーチンをtJavaコンポーネントと共に使用し、日付式が指定された形式であるかどうかを簡単に確認できます。

```
System.out.println(TalendDate.isDate("2010-02-09 00:00:00",
               "yyyy-MM-dd HH:mm:ss"));
```

Boolean値が[Run] (実行)ビューに返されます。

![結果は、\[Run\] (実行)ビューで"true"となります。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/routines14_c.png)

## 日付を比較

compareDateルーチンをtJavaコンポーネントと共に使用すると、2つの日付を容易に比較できます。たとえば、指定された形式に従って、ある日付が特定の日付より早いか遅いか、同じかを確認できます。このルーチンは2つのパラメーター(2つの日付)を必要とし、次の3つの値のうちの1つを返します。

* -1: 最初の日付が2番目の日付より早い。
* 0: 最初の日付が2番目の日付と同じである。
* -1: 最初の日付が2番目の日付より遅い。

このルーチンの使用例を以下に示します。

```
System.out.println(TalendDate.compareDate(TalendDate.parseDate("yyyy-MM-dd", "2015/11/24"), TalendDate.parseDate("yyyy-MM-dd", "2025/11/24")));
```

この例では2015/11/24と2025/11/24という2つの日付を比較し、最初の日付が2番目の日付より早いことを示す-1という値を[Run] (実行)ビューに返します。

![結果は、\[Run\] (実行)ビューで-1となります。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/routines14_d.png)

## 日付の設定

setDateルーチンをtJavaコンポーネントと共に使用して、現在の日付の年を簡単に変更できます。例:

```
System.out.println(TalendDate.formatDate("yyyy/MM/dd HH:mm:ss",new Date()));
                  System.out.println(TalendDate.setDate(new Date(),2011,"yyyy"));
```

現在の日付に続けて新しい日付が[Run] (実行)ビューに表示されます。

![結果は、\[Run\] (実行)ビューで2010/02/26 18:03:14、そしてSat Feb 26 18:03:14 CET 2011となります。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/routines14_e.png)

## 日付の解析

parseDateルーチンを、tJavaコンポーネントと共に使用して、ある形式の日付文字列を別の日付形式に簡単に変更できます。例:

```
System.out.println(TalendDate.parseDate("yyyy-MM-dd HH:mm:ss",
                  "1979/10/20 19:00:59"));
```

文字列は変更され、日付形式で返されます。

![結果は、\[Run\] (実行)ビューでSat Oct 20 19:00:59 CET 1979となります。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/routines14_f.png)

## 日付の一部を取得する

getPartOfDateルーチンをtJavaコンポーネントと共に使用して、日付の一部を簡単に取得できます。例:

```
Date D=TalendDate.parseDate("dd-MM-yyyy HH:mm:ss", "13-10-2010 12:23:45");
               System.out.println(D.toString());
               System.out.println(TalendDate.getPartOfDate("DAY_OF_MONTH", D));
               System.out.println(TalendDate.getPartOfDate("MONTH", D));
               System.out.println(TalendDate.getPartOfDate("YEAR", D));
               System.out.println(TalendDate.getPartOfDate("DAY_OF_YEAR", D));
               System.out.println(TalendDate.getPartOfDate("DAY_OF_WEEK", D));
```

この例では、日(DAY\_OF\_MONTH)、月(MONTH)、年(YEAR)、年の通算日(DAY\_OF\_YEAR)および曜日(DAY\_OF\_WEEK)が、[Run] (実行)ビューに返されます。返される日付はすべて、数値データ型です。

![結果は、\[Run\] (実行)ビューでWed Oct 13 12:23:45 CEST 2010、そして13、9、2010、286、4となります。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/routinesGetPartOfDateresult.png)

情報メモNote: [Run] (実行)ビューでは、月(MONTH)を参照する日付文字列は0で始まり11で終わります: 0は1月、11は12月に対応しています。

## 現在の日付をフォーマットする

getDateルーチンをtJavaコンポーネントと共に使用して、指定された形式に従って現在の日付を取得し、簡単にフォーマットできます。例:

```
System.out.println(TalendDate.getDate("CCYY-MM-DD"));
```

現在の日付が指定された形式(オプション)で返されます。

![結果は、\[Run\] (実行)ビューで2010-03-02となります。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/routines14_g.png)