用於格式化和剖析的日期時間模式
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 | 年代 | 文字 | 西元;公元 |
y | 年 | 年 | 2020; 20 |
D | 一年中的第幾天 | 數字(3) | 189 |
M/L | 一年中的第幾個月 | 月份 | 7;07;7 月;七月 |
d | 一個月中的第幾天 | 數字(2) | 28 |
Q/q | 一個季度的第幾個月 | 數字/文字 | 3;03;第三季;第三季度 |
E | 一週中的第幾天 | 文字 | 星期二;星期二 |
F | 一個月中的第幾個星期 | 數字(1) | 3 |
a | 一天中的上午/下午 | 上午/下午 | 下午 |
h | 上午/下午的時鐘小時(1-12) | 數字(2) | 12 |
K | 上午/下午的小時(0-11) | 數字(2) | 0 |
k | 一天中的時鐘小時(1-24) | 數字(2) | 1 |
H | 一天中的小時(0-23) | 數字(2) | 0 |
m | 一小時中的分鐘 | 數字(2) | 30 |
s | 一分鐘中的秒數 | 數字(2) | 55 |
S | 一秒中的小數部分 | 小數 | 978 |
V | 時區 ID | 時區 ID | 美洲/洛杉磯;Z;-08:30 |
z | 時區名稱 | 時區名稱 | 太平洋標準時間;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 代表此類型日期時間樣式可使用的最大字母數量。
- 在格式化中,如果字母數量為一,則使用最少位數輸出值,否則不使用填補,否則字母數量用作輸出欄位的寬度,並視需要以零填補值。
- 在解析中,輸入欄位中預期有精確的位數。
-
數字/文字:如果樣式字母數量為 3 或更大,請使用上述文字規則。否則使用上述數字規則。
-
小數:使用一個或多個(最多 9 個)連續的
'S'
字元,例如SSSSSS
,來解析和格式化秒的小數。對於解析,可接受的小數長度可以是 [1,連續「S」的數量]。對於格式化,小數長度會使用零填補到連續「S」的數量。Spark 支援微秒精度的日期時間,最多有 6 個有效位數,但可以解析納秒,並截斷超過的部分。 -
年:字母數量決定最低欄位寬度,低於此寬度時會使用空白填充。如果字母數量為兩個,則會使用縮減的兩位數格式。列印時,會輸出最右邊的兩個數字。解析時,會使用 2000 的基礎值進行解析,產生介於 2000 至 2099(含)之間的年份。如果字母數量小於四個(但不是兩個),則只有負年份會輸出符號。否則,如果在「G」不存在時超過空白寬度,則會輸出符號。7 個或更多字母會失敗。
- 月:遵循數字/文字規則。文字格式取決於字母 - 「M」表示「標準」格式,而「L」表示「獨立」格式。這兩種格式僅在某些語言中不同。例如,在俄文中,「Июль」是 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 的顯示文字名稱。如果字母數量為一、二或三個,則會輸出簡稱。如果字母數量為四個,則會輸出全名。五個或更多字母會失敗。
-
偏移量 X 和 x:根據樣式字母的數量格式化偏移量。一個字母僅輸出小時,例如「+01」,除非分鐘數不為零,這種情況下也會輸出分鐘數,例如「+0130」。兩個字母輸出小時和分鐘,沒有冒號,例如「+0130」。三個字母輸出小時和分鐘,有冒號,例如「+01:30」。四個字母輸出小時和分鐘,以及可選的秒數,沒有冒號,例如「+013015」。五個字母輸出小時和分鐘,以及可選的秒數,有冒號,例如「+01:30:15」。六個或更多字母會失敗。樣式字母「X」(大寫)在要輸出的偏移量為零時會輸出「Z」,而樣式字母「x」(小寫)會輸出「+00」、「+0000」或「+00:00」。
-
偏移量 O:根據樣式字母的數量格式化在地化偏移量。一個字母輸出在地化偏移量的簡短形式,也就是在地化偏移量文字,例如「GMT」,小時數沒有前導零,如果分鐘數和秒數不為零,則可選擇輸出 2 位數的分鐘數和秒數,以及冒號,例如「GMT+8」。四個字母輸出完整形式,也就是在地化偏移量文字,例如「GMT」,有 2 位數的小時數和分鐘數欄位,如果秒數欄位不為零,則可選擇輸出秒數欄位,以及冒號,例如「GMT+08:00」。任何其他數量的字母都會失敗。
-
偏移量 Z:根據樣式字母的數量格式化偏移量。一個、兩個或三個字母輸出小時和分鐘,沒有冒號,例如「+0130」。當偏移量為零時,輸出結果會是「+0000」。四個字母輸出在地化偏移量的完整形式,等於偏移量 O 的四個字母。當偏移量為零時,輸出結果會是對應的在地化偏移量文字。五個字母輸出小時、分鐘,如果秒數不為零,則可選擇輸出秒數,有冒號。如果偏移量為零,則輸出「Z」。六個或更多字母會失敗。
-
可選區段的開始和結束:使用
[]
定義可選區段,且可以巢狀。在格式化的過程中,所有有效的資料都會輸出,即使它在可選區段中。在分析的過程中,整個區段可能會從分析的字串中遺失。可選區段的開始使用[
,並使用]
(或在樣式的結尾)結束。 - 「E」、「F」、「q」和「Q」的符號只能用於日期時間格式化,例如
date_format
。它們不能用於日期時間分析,例如to_timestamp
。