フォーマットおよび解析の日付時刻パターン
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 | 曜日 | テキスト | Tue; Tuesday |
F | 月内の曜日(揃え) | 数値(1) | 3 |
a | 午前/午後 | 午前/午後 | 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文字未満のパターン文字では、短いテキスト形式(通常は略語)が使用されます。例:曜日「月曜日」は「月」と出力される可能性があります。正確に4文字のパターン文字では、完全なテキスト形式(通常は完全な説明)が使用されます。例:曜日「月曜日」は「月曜日」と出力される可能性があります。5文字以上は失敗します。
- 数値(n):ここでの n は、この種類の日付時刻パターンに使用できる文字の最大数を表します。
- フォーマットでは、文字数が1の場合、値は最小桁数で、パディングなしで出力されます。それ以外の場合は、桁数が出力フィールドの幅として使用され、必要に応じて値にゼロパディングが追加されます。
- 解析では、入力フィールドに正確な桁数が期待されます。
-
数値/テキスト:パターン文字数が3以上の場合、上記のテキストルールを使用します。それ以外の場合は、上記の数のルールを使用します。
-
小数部:1つ以上(最大9つ)の連続した
'S'
文字(例:SSSSSS
)を使用して、秒の小数部を解析およびフォーマットします。解析の場合、許容される小数部の長さは[1、連続する'S'の数]です。フォーマットの場合、小数部の長さは、連続する'S'の数にゼロでパディングされます。Sparkはマイクロ秒精度のdatetimeをサポートしており、最大6桁の有効数字がありますが、超過した部分は切り捨てられてナノ秒を解析できます。 -
年:文字数は、パディングが使用される最小フィールド幅を決定します。文字数が2の場合、削減された2桁の形式が使用されます。印刷の場合、これは右端の2桁を出力します。解析の場合、これは2000の基本値を使用して解析され、2000~2099の範囲の年になります。文字数が4未満(ただし2ではない)の場合、負の年に対してのみ符号が出力されます。それ以外の場合は、'G'が存在しない場合にパッド幅を超えた場合に符号が出力されます。7文字以上は失敗します。
- 月:数値/テキストのルールに従います。テキスト形式は文字によって異なります - 'M'は'標準'形式を表し、'L'は'スタンドアロン'形式を表します。これらの2つの形式は、一部の言語でのみ異なります。たとえば、ロシア語では、「Июль」が7月のスタンドアロン形式であり、「Июля」が標準形式です。以下は、サポートされているすべてのパターン文字の例です。
'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である必要があります。
-
ゾーンID(V):これはタイムゾーンIDを表示します。パターン文字の数は2である必要があります。
-
ゾーン名(z):これはタイムゾーンIDのテキスト名を表示します。文字数が1、2、または3の場合、短い名前が出力されます。文字数が4の場合、完全な名前が出力されます。5文字以上は失敗します。
-
オフセットXおよびx:これは、パターン文字の数に基づいてオフセットをフォーマットします。1文字は、分がゼロ以外の場合に分も出力される場合(例:「+0130」)を除き、単に時を出力します(例:「+01」)。2文字は、コロンなしで時と分を出力します(例:「+0130」)。3文字は、コロン付きで時と分を出力します(例:「+01:30」)。4文字は、コロンなしで時と分、およびオプションの秒を出力します(例:「+013015」)。5文字は、コロン付きで時と分、およびオプションの秒を出力します(例:「+01:30:15」)。6文字以上は失敗します。パターン文字'X'(大文字)は、出力されるオフセットがゼロの場合に'Z'を出力しますが、パターン文字'x'(小文字)は'+00'、'+0000'、または'+00:00'を出力します。
-
オフセットO:これは、パターン文字の数に基づいてローカライズされたオフセットをフォーマットします。1文字は、ローカライズされたオフセットの短い形式を出力します。これは、先行ゼロなしの時を持つローカライズされたオフセットテキストであり、ゼロ以外の場合にオプションの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
)には使用できません。