フォーマットと解析のための日時パターン
Spark では、日時にはいくつかの一般的なシナリオがあります。
-
CSV/JSON データソースは、日時のコンテンツを解析およびフォーマットするためにパターン文字列を使用します。
-
StringTypeをDateTypeまたはTimestampTypeに変換するため、またはその逆の変換に関連する日時関数。たとえば、unix_timestamp、date_format、to_unix_timestamp、from_unixtime、to_date、to_timestamp、from_utc_timestamp、to_utc_timestampなど。
Spark は、日付とタイムスタンプの解析およびフォーマットに、以下の表のパターン文字を使用します。
| シンボル | 意味 | 表示 | 例 |
|---|---|---|---|
| G | 元号 | テキスト | 紀元(AD; Anno Domini) |
| y | 年 | 年 | 2020; 20 |
| D | 年中の日数 | 数字(3) | 189 |
| M/L | 年の月 | 月 | 7; 07; Jul; July |
| d | 月の日数 | 数字(2) | 28 |
| Q/q | 年の四半期 | 数字/テキスト | 3; 03; Q3; 3rd quarter |
| E | 曜日の日 | テキスト | 火; 火曜日 |
| F | 月中の整列された曜日 | 数字(1) | 3 |
| a | 1日の午前/午後 | 午前/午後 | PM |
| h | 午前/午後の時計の時 (1-12) | 数字(2) | 12 |
| K | 午前/午後の時 (0-11) | 数字(2) | 0 |
| k | 1日の時計の時 (1-24) | 数字(2) | 1 |
| H | 1日の時 (0-23) | 数字(2) | 0 |
| m | 時の分 | 数字(2) | 30 |
| s | 分の秒 | 数字(2) | 55 |
| S | 秒の小数 | 小数 | 978 |
| V | タイムゾーンID | タイムゾーンID | America/Los_Angeles; Z; -08:30 |
| z | タイムゾーン名 | タイムゾーン名 | Pacific Standard Time; PST |
| O | ローカライズされたタイムゾーンオフセット | オフセット-O | GMT+8; GMT+08:00; UTC-08:00; |
| X | ゼロの場合は「Z」のタイムゾーンオフセット | オフセット-X | Z; -08; -0830; -08:30; -083015; -08:30:15; |
| x | タイムゾーンオフセット | オフセット-x | +0000; -08; -0830; -08:30; -083015; -08:30:15; |
| Z | タイムゾーンオフセット | オフセット-Z | +0000; -0800; -08:00; |
| ‘ | テキストのエスケープ | 区切り文字 | |
| ‘’ | シングルクォート | リテラル | ’ |
| [ | オプションセクションの開始 | ||
| ] | オプションセクションの終了 |
パターン文字の数はフォーマットを決定します。
-
テキスト: テキストのスタイルは、使用されるパターン文字の数に基づいて決まります。4文字未満の場合、通常は省略形である短いテキスト形式が使用されます。たとえば、曜日の月曜日が「Mon」と出力される場合があります。ちょうど4文字の場合、通常は完全な説明である完全なテキスト形式が使用されます。たとえば、曜日の月曜日が「Monday」と出力される場合があります。5文字以上は失敗します。
- 数字(n): ここでの n は、このタイプの datetime パターンが使用できる最大文字数を示します。
- フォーマットの場合、文字数が1の場合は、値は最小桁数で出力され、パディングはありません。それ以外の場合は、文字数がフィールドの幅として使用され、必要に応じて値がゼロでパディングされます。
- 解析の場合、入力フィールドには正確な桁数が期待されます。
-
数字/テキスト: パターン文字の数が3以上の場合、上記のテキストルールを使用します。それ以外の場合は、上記の数字ルールを使用します。
-
小数: 1つ以上の(最大9個の)連続した 'S' 文字を使用します(例:
SSSSSS)。秒の小数部分を解析およびフォーマットします。解析の場合、許容される小数部の長さは [1, 連続する 'S' の数] です。フォーマットの場合、小数部の長さはゼロでパディングされ、連続する 'S' の数になります。Spark はマイクロ秒精度の日時をサポートしており、最大6桁の有効数字がありますが、余分な部分は切り捨てられてナノ秒精度を解析できます。 -
年: 文字数は、パディングが使用される最小フィールド幅を決定します。文字数が2の場合、省略された2桁の形式が使用されます。印刷の場合、これは右端の2桁を出力します。解析の場合、これは基本値2000を使用して解析され、2000年から2099年までの範囲の年になります。文字数が4未満(ただし2ではない)の場合、符号は負の年の場合にのみ出力されます。それ以外の場合、'G' が存在しない場合にパディング幅を超えると符号が出力されます。7文字以上は失敗します。
- 月: Number/Text のルールに従います。テキスト形式は文字によって決まります。「M」は「標準」形式を意味し、「L」は「スタンドアロン」形式を意味します。これら2つの形式は、一部の言語でのみ異なります。たとえば、ロシア語では「Июль」は July のスタンドアロン形式であり、「Июля」は標準形式です。以下に、サポートされているすべてのパターン文字の例を示します。
'M'または'L': 年の月を表す数字(1から始まります)。「M」と「L」に違いはありません。1から9の月はパディングなしで印刷されます。spark-sql> select date_format(date '1970-01-01', "M"); 1 spark-sql> select date_format(date '1970-12-01', "L"); 12'MM'または'LL': 年の月を表す数字(1から始まります)。1〜9の月にはゼロパディングが追加されます。spark-sql> select date_format(date '1970-1-01', "LL"); 01 spark-sql> select date_format(date '1970-09-01', "MM"); 09'MMM': 標準形式の短いテキスト表現。月パターンは、スタンドアロン形式と標準形式に違いがないロケール(英語など)では、単独の月ではなく日付パターンの部分であるべきです。spark-sql> select date_format(date '1970-01-01', "d MMM"); 1 Jan spark-sql> select to_csv(named_struct('date', date '1970-01-01'), map('dateFormat', 'dd MMM', 'locale', 'RU')); 01 янв.'LLL': スタンドアロン形式の短いテキスト表現。日付フィールドのない月のみのフォーマット/解析に使用する必要があります。spark-sql> select date_format(date '1970-01-01', "LLL"); Jan spark-sql> select to_csv(named_struct('date', date '1970-01-01'), map('dateFormat', 'LLL', 'locale', 'RU')); янв.'MMMM': 標準形式の完全なテキスト月表現。日付/タイムスタンプの一部として月をフォーマット/解析するために使用されます。spark-sql> select date_format(date '1970-01-01', "d MMMM"); 1 January spark-sql> select to_csv(named_struct('date', date '1970-01-01'), map('dateFormat', 'd MMMM', 'locale', 'RU')); 1 января'LLLL': スタンドアロン形式の完全なテキスト月表現。このパターンは、月のみのフォーマット/解析に使用できます。spark-sql> select date_format(date '1970-01-01', "LLLL"); January spark-sql> select to_csv(named_struct('date', date '1970-01-01'), map('dateFormat', 'LLLL', 'locale', 'RU')); январь
-
午前/午後: これは1日の午前/午後を出力します。パターン文字数は1でなければなりません。
-
タイムゾーンID (V): これはタイムゾーンIDを表示します。パターン文字数は2でなければなりません。
-
タイムゾーン名 (z): これはタイムゾーンIDのテキスト名を表示します。文字数が1、2、または3の場合、短い名前が出力されます。文字数が4の場合、完全な名前が出力されます。5文字以上は失敗します。
-
オフセット X および x: パターン文字の数に基づいてオフセットをフォーマットします。1文字は時間のみを出力します(例: '+01')。ただし、分がゼロでない場合は分も出力します(例: '+0130')。2文字はコロンなしで時間と分を出力します(例: '+0130')。3文字はコロンありで時間と分を出力します(例: '+01:30')。4文字はコロンなしで時間、分、およびオプションの秒を出力します(例: '+013015')。5文字はコロンありで時間、分、およびオプションの秒を出力します(例: '+01:30:15')。6文字以上は失敗します。パターン文字「X」(大文字)は、出力されるオフセットがゼロの場合に「Z」を出力しますが、パターン文字「x」(小文字)は「+00」、「+0000」、または「+00:00」を出力します。
-
オフセット O: パターン文字の数に基づいてローカライズされたオフセットをフォーマットします。1文字はローカライズされたオフセットの短い形式(例: 'GMT')、先頭にゼロのない時間、オプションでゼロでない場合は2桁の分と秒、およびコロンを出力します。たとえば「GMT+8」です。4文字はローカライズされたオフセットの完全な形式(例: 'GMT')、2桁の時間と分フィールド、オプションでゼロでない場合は秒フィールド、およびコロンを出力します。たとえば「GMT+08:00」です。その他の文字数の場合は失敗します。
-
オフセット Z: パターン文字の数に基づいてオフセットをフォーマットします。1、2、または3文字はコロンなしで時間と分を出力します(例: '+0130')。オフセットがゼロの場合は「+0000」と出力されます。4文字は、オフセット-O の4文字と同等な、ローカライズされたオフセットの完全な形式を出力します。オフセットがゼロの場合は、対応するローカライズされたオフセットテキストが出力されます。5文字は、コロンありで、オプションでゼロでない場合は秒を含む時間と分を出力します。オフセットがゼロの場合は「Z」を出力します。6文字以上は失敗します。
-
オプションセクションの開始と終了:
[]を使用してオプションセクションを定義し、ネストすることもできます。フォーマット中、オプションセクション内にあるすべての有効なデータが出力されます。解析中、セクション全体が解析文字列から欠落する可能性があります。オプションセクションは[で開始され、](またはパターンの末尾)で終了します。 - 「E」、「F」、「q」、「Q」のシンボルは、日時フォーマット(例:
date_format)にのみ使用できます。日時解析(例:to_timestamp)には使用できません。