在資料分析計算中,日期時間類資料是比較特殊的類型,這裡我們就來研究一下如何在SPL中使用日期時間類資料。
1日期時間資料的轉換和生成
日期時間類資料,通常會用字元串來輸入或顯示。在使用集算器時,可以點選Tool>Option,在選項配置的Environment頁面中,設定日期時間類型資料所使用的預設格式,如:

使用SPL時,日期時間類型的資料會按照預設的格式顯示出來,如:
A | |
1 | =now() |
運作後檢視A1中的結果如下:
這裡用到的函數now() 是日期時間計算中比較常用的函數,可以獲得系統中目前的日期時間。日期時間的顯示在不同的語言環境中是不同的,特别是月份和星期等資料,下面都将以英文版的格式為例加以說明。
當需要輸入日期時間類型的常數時,也可以直接按照格式輸入字元串,此時SPL會自動将資料解析為日期時間資料,如:
B | C | ||
2019-2-1 | 12:45:30 | 2019-02-01 10:30:00 |
A1,B1和C1會分别被解析為日期類型、日期時間類型和時間類型資料,如下:
SPL可以把直接輸入的常數解析為日期時間類型,但對于已經是字元串類型的,就需要用date(),time() 或者datetime() 将字元串轉換為日期、時間或者日期時間資料,如:
2019 | 2 | 20 | |
=A1/"-"/B1/"-"/C1 | =12/":"/22/":00" | =A2+" "+B2 | |
3 | =ifdate(A2) | =iftime(B2) | =ifdate(C2) |
4 | =date(A2) | =time(B2) | =datetime(C2) |
5 | =ifdate(A4) | =iftime(B4) | =ifdate(C4) |
A2,B2和C2中是通過字元串運算得到的字元串:
第3行用ifdate() 和iftime() 函數判斷第2行的資料是否已被處理為日期或者時間類型(注意:判斷日期類型和日期時間類型的資料,都使用ifdate()),A3,B3和C3中的結果如下:
從結果可以看出,第2行中單元格值都不是日期或時間類資料,實際上都是字元串,顯示也都和日期時間不同。
在第4行中,将字元串按照對應的格式分别轉換為日期時間資料,結果如下:
在第5行判斷第4行的資料是否已被處理為日期或者時間類型,結果如下:
當使用外部資料時,有時需要處理不同格式的日期時間資料,這時可以在使用date(),time() 或者datetime() 時,在字元串後添加使用的顯示格式串,如:
Feb 2, 2019 | '2:30:45 PM | '2019-6-20 2:30:45 PM | |
MMM d,yyyy | hⓂs a | yyyy-M-d hⓂs a | |
=date(A1,A2) | =time(B1,B2) | =datetime(C1,C2) |
在第1行中的資料都并沒有用預設的日期時間格式,而且B1和C1都在前面添加了 ' 字元表示使用字元串常數,A1,B1和C1中的資料如下:
需要注意的是,月份格式MMM的設定是和語言環境相關的,英文環境中表示月份的英文縮寫,如Feb;而中文環境中則會顯示為中文月份。
第2行中列出的格式串訓示SPL如何解析第1行中的資料,第3行使用這些格式串進行轉換,結果如下:
完成類型轉換後,檢視結果時仍然會用預設的格式顯示。如果要用其他格式顯示,可以用string(d,fmt)函數,将日期時間類資料轉換為指定格式的字元串,如:
2019-02-21 | 2019-12-01 10:30:00 | ||
MMMM d,yyyy | MMM d,yyyy hⓂs a | ||
=string(A1,A2) | =string(B1,B2) | =string(C1,C2) |
A3,B3和C3中,将日期時間類資料轉換為指定格式的字元串:
當然,也可以根據需要直接修改預設的日期時間顯示格式。
在用date(),time() 或者datetime() 生成資料類型時,還可以直接依次指定年,月,日,時,分,秒等各個分量:
=date(2019,2,21) | =time(13,5,0) | =datetime(2019,12,29,13,5,0) |
結果如下:
在指定各個分量時,要注意每個整數的合理範圍,例如小時分量在0~23之間。
2日期時間資料的顯示格式
=date(201906,29) | =time(13:5:18) | =datetime(A1,B1) |
這個例子中,A1中用date()生成日期,第一個參數使用了6位數,SPL将用其同時表示年和月。而C1則将A1中的日期和B1中的時間合并得到日期時間資料,結果如下:
上一節已經使用到了日期時間資料的一些顯示格式,用格式字元串來指定顯示樣式,例如yyyy表示4位數的年份、dd表示2位數的日期等。下面将具體說明格式串中各個字元的作用,并以C1中的資料為例顯示相應的格式化結果:
字元 | 作用 | SPL | 結果 |
---|---|---|---|
y/yy | 年,兩位數字 | =string(C1,"yy") | |
yyyy | 年,四位數字 | =string(C1,"yyyy") | |
M | 月 | =string(C1,"M") | |
MM | 月,兩位數字,不足用0補齊 | =string(C1,"MM") | |
MMM | 月,英文簡寫 | =string(C1,"MMM") | |
MMMM | 月,英文全拼 | =string(C1,"MMMM") | |
d | 日 | =string(C1,"d") | |
dd | 日,兩位數字,不足用0補齊 | =string(C1,"dd") | |
E | 星期,英文簡寫 | =string(C1,"E") | |
EEEE | 星期,英文全拼 | =string(C1,"EEEE") | |
G | Era辨別符,公元前/公元後,縮寫 | =string(C1,"G") | |
w | 本年的第幾周 | =string(C1,"w") | |
ww | 本年的第幾周,兩位數字,不足用0補齊 | =string(C1,"ww") | |
W | 本月的第幾周 | =string(C1,"W") | |
F | 在本月的第幾周,僅根據日計算 | =string(C1,"F") | |
D | 本年的第幾天 | =string(C1,"D") | |
H | 小時,24小時制,0~23 | =string(C1,"H") | |
HH | 小時,24小時制,0~23,兩位數字,不足用0補齊 | =string(C1,"HH") | |
k | 小時,24小時制,1~24 | =string(C1,"k") | |
kk | 小時,24小時制,1~24,兩位數字,不足用0補齊 | =string(C1,"kk") | |
h | 小時,12小時制,1~12 | =string(C1,"h") | |
hh | 小時,12小時制,1~12,兩位數字,不足用0補齊 | =string(C1,"hh") | |
K | 小時,12小時制,0~11 | =string(C1,"K") | |
KK | 小時,12小時制,0~11,兩位數字,不足用0補齊 | =string(C1,"KK") | |
m | 分鐘 | =string(C1,"m") | |
mm | 分鐘,兩位數字,不足用0補齊 | =string(C1,"mm") | |
s | 秒 | =string(C1,"s") | |
ss | 秒,兩位數字,不足用0補齊 | =string(C1,"ss") | |
S | 毫秒 | =string(C1,"S") | |
a | 上午/下午 | =string(C1,"a") | |
z | 時區,縮寫 | =string(C1,"z") | |
zzzz | 時區,全拼 | =string(C1,"zzzz") | |
Z | 時區代碼 | =string(C1,"Z") | |
3從日期時間資料中擷取資訊
在日期時間等類型的資料中,具體的年,月,日,時,分,秒等常常是處理時需要單獨使用的資訊,我們可以通過year(),month(),day(),hour(),minute(),second(),millisecond()等函數獲得這些日期時間資料中的各個分量:
2019-6-30 | 12:45:30.230 | ||
=year(A1) | =month(A1) | =day(A1) | |
=hour(B1) | =minute(B1) | =second(B1) | |
=month(C1) | =hour(C1) | =millisecond(C1) |
A1,B1和C1中的日期時間資料如下:
A2,B2和C2從日期資料中分别擷取年、月、日:
A3,B3和C3從時間資料中擷取時、分、秒:
A4,B4和C4從now() 函數的日期時間類型結果中擷取月,小時和毫秒分量:
從結果中可以看到,now() 函數傳回的結果會精确到毫秒,但顯示時隻會顯示到秒。在使用now() 函數時,可以通過添加選項的方法來改變結果的精度。如:
=now@d() | =now@t() | ||
=now@m() | =now@s() | =millisecond(B2) |
A1中添加@d選項,隻取日期部分資料,B1中添加@t選項,隻取時間部分資料,結果如下:
A2中添加@m選項,資料将精确到分,B2中添加@s選項,獲得的資料将精确到秒,結果如下:
在C2中可以看到,B2中的資料毫秒分量為0:
@m和@s選項,也可以用在datetime() 和time() 函數中,設定轉換日期時間資料及時間資料時的精度為分或秒。
在日期類型資料中,也可以擷取到時間分量,從時間類型資料中也可以擷取日期分量,如:
19:05:10.866 | |||
=hour(A1) | =minute(A1) | =second(A1) | |
=month@y(B1) | =day(B1) |
A2,B2和C2中結果如下:
也就是說,單獨的日期資料,其中的時間指定為00:00:00。
A3中的month函數添加了@y選項,獲得年月組成的6位數,A3和B3中結果如下:
也就是說,單獨的時間資料,其中的日期為1970年1月1日。
除了直接從日期時間類型的資料中擷取各個分量,還有一些函數可以用來獲得日期相關的資料。
使用day@w(),在擷取日期分量時添加@w選項,可以獲得本日是一周中的第幾天:
2019-4-3 | 2019-6-18 | 2020-2-20 | |
=day@w(A1) | =day@w(B1) | =day@w(C1) | |
=string(A1,"EEEE") | =string(B1,"EEEE") |
A2,B2和C2擷取各個日期分别是一周中的第幾天,結果如下:
SPL中,每周的第1天是從周日開始計算的,在第3行中用顯示字元串的方式取得了每一天是星期幾:
另外,我們還可以使用pdate() 函數,配合不同的選項獲得日期
2019-8-17 | |||
=pdate@w(A1) | =pdate@m(A1) | =pdate@q(A1) | |
=pdate@we(A1) | =pdate@me(A1) | =pdate@qe(A1) |
在pdate() 函數中:
○ 直接使用@w選項可以獲得本周第1天的日期,從周日開始計算;
○ 添加@m選項可以獲得本月第1天的日期;
○ 添加@q選項可以獲得本季度第1天的日期;
○ 添加@e則可以獲得某個時間段最後一天的資料,如本周最後一天,本季度最後一天等。A2,B2,C2,A3,B3和C3中的結果依次如下:
SPL中還可以使用days() 函數計算某日期所在月的總天數,添加@q選項可以得到所在季度的總天數,添加@y選項可以得到整年的總天數,如:
=days(A1) | =days@q(A1) | =days@y(A1) |
A2,B2和C2中的結果如下:
4使用日期時間資料的計算
除了直接從日期時間資料中擷取資訊,在SPL中還可以使用日期時間類資料來執行各類計算。
最常用的有關日期的計算就是計算年齡:
1995-3-30 | |||
=age(A1) | =age@m(A1) | =age@y(A1) |
A1和B1中的資料如下:
在第2行用age() 函數,根據A1中的生日來計算年齡,計算年齡時,是以目前的日期為準的,預設情況将精确到日,添加@m可以将精度設為月,添加@y可以将精度設定為年。在不同精度的情況下,計算所得的年齡可能會有差別,A2,B2和C2中得到的年齡分别如下:
使用age() 函數,類似于計算生日日期和目前日期間隔的年數。更普遍的計算時間間隔的函數是interval() 函數,用這個函數可以計算兩個日期時間資料之間相差多少天,添加@y,@q,@m,@s,@ms等選項,可以計算間隔多少年,季度,月,秒或毫秒。例如:
1995-4-30 | 2019-4-10 | ||
=interval(A1,B1) | =interval@y(A1,B1) | =B1-A1 |
如果隻需要計算兩個日期之間相差多少天,也可以直接用減法完成,A2,B2和C2中的結果如下:
特别的,每個日期時間資料都可以轉換為一個對應的長整數,這個長整數其實就是指定的日期時間和1970年1月1日,格林威治時間0:00:00的間隔毫秒數,如:
=datetime("1/1/1970 0:00:00 GMT","m/d/yyyy H
上一篇:銀行業大資料量清單報表案例 下一篇:SPL 的序号思維及定位計算 舉封包章 請選擇舉報類型 内容侵權 涉嫌營銷 内容抄襲 違法資訊 其他 具體原因 包含不真實資訊 涉及個人隐私 原文連結(必填) 補充說明 0/200 上傳截圖 格式支援JPEG/PNG/JPG,圖檔不超過1.9M 取消 确認 已經收到您得舉報資訊,我們會盡快稽核 提問和評論都可以,用心的回複會被更多人看到 評論 釋出評論 全部評論 ( )相關文章
{{hot.num}}{{hot.unit}} 人氣 {{fans.num}}{{fans.unit}} 粉絲 {{comments.num}}{{comments.unit}} 評論
關注 私信 集算器分類的近期文章
近期評論
近期文章
{{if nowYear.length>0}} {{year}} {{each nowYear value index}} {{value.name}} {{value.num}}篇 {{/each}} {{/if}} {{if otherYear.length>0}} {{each otherYear value index}} {{value.name}} {{value.num}}篇 熱評好文七日熱門
分類清單
相關标簽全部 java日期時間函數 lua的時間和日期函數(轉 lua擷取日期時間函數 mysql日期時間函數 mysql 擷取時間裡的日期函數 mysql處理日期和時間的函數 mysql的日期時間類的函數 mysql系統時間的日期函數 oracle中截取時間的日期函數 oracle取時間的日期函數 文章目錄
51CTO首頁 部落格 學堂 精培 企業教育訓練 CTO訓練營 鴻蒙技術社群 WOT大會 元宇宙大會 移動端 公衆号矩陣 收藏本站 免費課程 課程排行 直播課 軟考學堂 精品班 廠商認證 IT技術 2022年軟考 PMP項目管理 線上學習 企業服務 技術經理研習營 LeaTech峰會 文章 資源 問答 鴻蒙課堂 專欄 直播
|