在數(shù)據(jù)分析計(jì)算中,日期時(shí)間類數(shù)據(jù)是比較特殊的類型,這里我們就來(lái)研究一下如何在SPL中使用日期時(shí)間類數(shù)據(jù)。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到樺南網(wǎng)站設(shè)計(jì)與樺南網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋樺南地區(qū)。日期時(shí)間類數(shù)據(jù),通常會(huì)用字符串來(lái)輸入或顯示。在使用集算器時(shí),可以點(diǎn)擊Tool>Option,在選項(xiàng)配置的Environment頁(yè)面中,設(shè)定日期時(shí)間類型數(shù)據(jù)所使用的默認(rèn)格式,如:
使用SPL時(shí),日期時(shí)間類型的數(shù)據(jù)會(huì)按照默認(rèn)的格式顯示出來(lái),如:
A | |
1 | =now() |
運(yùn)行后查看A1中的結(jié)果如下:
這里用到的函數(shù)now() 是日期時(shí)間計(jì)算中比較常用的函數(shù),可以獲得系統(tǒng)中當(dāng)前的日期時(shí)間。日期時(shí)間的顯示在不同的語(yǔ)言環(huán)境中是不同的,特別是月份和星期等數(shù)據(jù),下面都將以英文版的格式為例加以說(shuō)明。
當(dāng)需要輸入日期時(shí)間類型的常數(shù)時(shí),也可以直接按照格式輸入字符串,此時(shí)SPL會(huì)自動(dòng)將數(shù)據(jù)解析為日期時(shí)間數(shù)據(jù),如:
A | B | C | |
1 | 2019-2-1 | 12:45:30 | 2019-02-01 10:30:00 |
A1,B1和C1會(huì)分別被解析為日期類型、日期時(shí)間類型和時(shí)間類型數(shù)據(jù),如下:
SPL可以把直接輸入的常數(shù)解析為日期時(shí)間類型,但對(duì)于已經(jīng)是字符串類型的,就需要用date(),time() 或者datetime() 將字符串轉(zhuǎn)換為日期、時(shí)間或者日期時(shí)間數(shù)據(jù),如:
A | B | C | |
1 | 2019 | 2 | 20 |
2 | =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中是通過(guò)字符串運(yùn)算得到的字符串:
第3行用ifdate() 和iftime() 函數(shù)判斷第2行的數(shù)據(jù)是否已被處理為日期或者時(shí)間類型(注意:判斷日期類型和日期時(shí)間類型的數(shù)據(jù),都使用ifdate()),A3,B3和C3中的結(jié)果如下:
從結(jié)果可以看出,第2行中單元格值都不是日期或時(shí)間類數(shù)據(jù),實(shí)際上都是字符串,顯示也都和日期時(shí)間不同。
在第4行中,將字符串按照對(duì)應(yīng)的格式分別轉(zhuǎn)換為日期時(shí)間數(shù)據(jù),結(jié)果如下:
在第5行判斷第4行的數(shù)據(jù)是否已被處理為日期或者時(shí)間類型,結(jié)果如下:
當(dāng)使用外部數(shù)據(jù)時(shí),有時(shí)需要處理不同格式的日期時(shí)間數(shù)據(jù),這時(shí)可以在使用date(),time() 或者datetime() 時(shí),在字符串后添加使用的顯示格式串,如:
A | B | C | |
1 | Feb 2, 2019 | '2:30:45 PM | '2019-6-20 2:30:45 PM |
2 | MMM d,yyyy | h?s a | yyyy-M-d h?s a |
3 | =date(A1,A2) | =time(B1,B2) | =datetime(C1,C2) |
在第1行中的數(shù)據(jù)都并沒(méi)有用默認(rèn)的日期時(shí)間格式,而且B1和C1都在前面添加了 ' 字符表示使用字符串常數(shù),A1,B1和C1中的數(shù)據(jù)如下:
需要注意的是,月份格式MMM的設(shè)定是和語(yǔ)言環(huán)境相關(guān)的,英文環(huán)境中表示月份的英文縮寫,如Feb;而中文環(huán)境中則會(huì)顯示為中文月份。
第2行中列出的格式串指示SPL如何解析第1行中的數(shù)據(jù),第3行使用這些格式串進(jìn)行轉(zhuǎn)換,結(jié)果如下:
完成類型轉(zhuǎn)換后,查看結(jié)果時(shí)仍然會(huì)用默認(rèn)的格式顯示。如果要用其他格式顯示,可以用string(d,fmt)函數(shù),將日期時(shí)間類數(shù)據(jù)轉(zhuǎn)換為指定格式的字符串,如:
A | B | C | |
1 | 2019-02-21 | 12:45:30 | 2019-12-01 10:30:00 |
2 | MMMM d,yyyy | h?s a | MMM d,yyyy h?s a |
3 | =string(A1,A2) | =string(B1,B2) | =string(C1,C2) |
A3,B3和C3中,將日期時(shí)間類數(shù)據(jù)轉(zhuǎn)換為指定格式的字符串:
當(dāng)然,也可以根據(jù)需要直接修改默認(rèn)的日期時(shí)間顯示格式。
在用date(),time() 或者datetime() 生成數(shù)據(jù)類型時(shí),還可以直接依次指定年,月,日,時(shí),分,秒等各個(gè)分量:
A | B | C | |
1 | =date(2019,2,21) | =time(13,5,0) | =datetime(2019,12,29,13,5,0) |
結(jié)果如下:
在指定各個(gè)分量時(shí),要注意每個(gè)整數(shù)的合理范圍,例如小時(shí)分量在0~23之間。
A | B | C | |
1 | =date(201906,29) | =time(13:5:18) | =datetime(A1,B1) |
這個(gè)例子中,A1中用date()生成日期,第一個(gè)參數(shù)使用了6位數(shù),SPL將用其同時(shí)表示年和月。而C1則將A1中的日期和B1中的時(shí)間合并得到日期時(shí)間數(shù)據(jù),結(jié)果如下:
上一節(jié)已經(jīng)使用到了日期時(shí)間數(shù)據(jù)的一些顯示格式,用格式字符串來(lái)指定顯示樣式,例如yyyy表示4位數(shù)的年份、dd表示2位數(shù)的日期等。下面將具體說(shuō)明格式串中各個(gè)字符的作用,并以C1中的數(shù)據(jù)為例顯示相應(yīng)的格式化結(jié)果:
字符 | 作用 | SPL | 結(jié)果 |
---|---|---|---|
y/yy | 年,兩位數(shù)字 | =string(C1,"yy") | |
yyyy | 年,四位數(shù)字 | =string(C1,"yyyy") | |
M | 月 | =string(C1,"M") | |
MM | 月,兩位數(shù)字,不足用0補(bǔ)齊 | =string(C1,"MM") | |
MMM | 月,英文簡(jiǎn)寫 | =string(C1,"MMM") | |
MMMM | 月,英文全拼 | =string(C1,"MMMM") | |
d | 日 | =string(C1,"d") | |
dd | 日,兩位數(shù)字,不足用0補(bǔ)齊 | =string(C1,"dd") | |
E | 星期,英文簡(jiǎn)寫 | =string(C1,"E") | |
EEEE | 星期,英文全拼 | =string(C1,"EEEE") | |
G | Era標(biāo)識(shí)符,公元前/公元后,縮寫 | =string(C1,"G") | |
w | 本年的第幾周 | =string(C1,"w") | |
ww | 本年的第幾周,兩位數(shù)字,不足用0補(bǔ)齊 | =string(C1,"ww") | |
W | 本月的第幾周 | =string(C1,"W") | |
F | 在本月的第幾周,僅根據(jù)日計(jì)算 | =string(C1,"F") | |
D | 本年的第幾天 | =string(C1,"D") | |
H | 小時(shí),24小時(shí)制,0~23 | =string(C1,"H") | |
HH | 小時(shí),24小時(shí)制,0~23,兩位數(shù)字,不足用0補(bǔ)齊 | =string(C1,"HH") | |
k | 小時(shí),24小時(shí)制,1~24 | =string(C1,"k") | |
kk | 小時(shí),24小時(shí)制,1~24,兩位數(shù)字,不足用0補(bǔ)齊 | =string(C1,"kk") | |
h | 小時(shí),12小時(shí)制,1~12 | =string(C1,"h") | |
hh | 小時(shí),12小時(shí)制,1~12,兩位數(shù)字,不足用0補(bǔ)齊 | =string(C1,"hh") | |
K | 小時(shí),12小時(shí)制,0~11 | =string(C1,"K") | |
KK | 小時(shí),12小時(shí)制,0~11,兩位數(shù)字,不足用0補(bǔ)齊 | =string(C1,"KK") | |
m | 分鐘 | =string(C1,"m") | |
mm | 分鐘,兩位數(shù)字,不足用0補(bǔ)齊 | =string(C1,"mm") | |
s | 秒 | =string(C1,"s") | |
ss | 秒,兩位數(shù)字,不足用0補(bǔ)齊 | =string(C1,"ss") | |
S | 毫秒 | =string(C1,"S") | |
a | 上午/下午 | =string(C1,"a") | |
z | 時(shí)區(qū),縮寫 | =string(C1,"z") | |
zzzz | 時(shí)區(qū),全拼 | =string(C1,"zzzz") | |
Z | 時(shí)區(qū)代碼 | =string(C1,"Z") |
在日期時(shí)間等類型的數(shù)據(jù)中,具體的年,月,日,時(shí),分,秒等常常是處理時(shí)需要單獨(dú)使用的信息,我們可以通過(guò)year(),month(),day(),hour(),minute(),second(),millisecond()等函數(shù)獲得這些日期時(shí)間數(shù)據(jù)中的各個(gè)分量:
A | B | C | |
1 | 2019-6-30 | 12:45:30.230 | =now() |
2 | =year(A1) | =month(A1) | =day(A1) |
3 | =hour(B1) | =minute(B1) | =second(B1) |
4 | =month(C1) | =hour(C1) | =millisecond(C1) |
A1,B1和C1中的日期時(shí)間數(shù)據(jù)如下:
A2,B2和C2從日期數(shù)據(jù)中分別獲取年、月、日:
A3,B3和C3從時(shí)間數(shù)據(jù)中獲取時(shí)、分、秒:
A4,B4和C4從now() 函數(shù)的日期時(shí)間類型結(jié)果中獲取月,小時(shí)和毫秒分量:
從結(jié)果中可以看到,now() 函數(shù)返回的結(jié)果會(huì)精確到毫秒,但顯示時(shí)只會(huì)顯示到秒。在使用now() 函數(shù)時(shí),可以通過(guò)添加選項(xiàng)的方法來(lái)改變結(jié)果的精度。如:
A | B | C | |
1 | =now@d() | =now@t() | |
2 | =now@m() | =now@s() | =millisecond(B2) |
A1中添加@d選項(xiàng),只取日期部分?jǐn)?shù)據(jù),B1中添加@t選項(xiàng),只取時(shí)間部分?jǐn)?shù)據(jù),結(jié)果如下:
A2中添加@m選項(xiàng),數(shù)據(jù)將精確到分,B2中添加@s選項(xiàng),獲得的數(shù)據(jù)將精確到秒,結(jié)果如下:
在C2中可以看到,B2中的數(shù)據(jù)毫秒分量為0:
@m和@s選項(xiàng),也可以用在datetime() 和time() 函數(shù)中,設(shè)定轉(zhuǎn)換日期時(shí)間數(shù)據(jù)及時(shí)間數(shù)據(jù)時(shí)的精度為分或秒。
在日期類型數(shù)據(jù)中,也可以獲取到時(shí)間分量,從時(shí)間類型數(shù)據(jù)中也可以獲取日期分量,如:
A | B | C | |
1 | 2019-6-30 | 19:05:10.866 | |
2 | =hour(A1) | =minute(A1) | =second(A1) |
3 | =month@y(B1) | =day(B1) |
A2,B2和C2中結(jié)果如下:
也就是說(shuō),單獨(dú)的日期數(shù)據(jù),其中的時(shí)間指定為00:00:00。
A3中的month函數(shù)添加了@y選項(xiàng),獲得年月組成的6位數(shù),A3和B3中結(jié)果如下:
也就是說(shuō),單獨(dú)的時(shí)間數(shù)據(jù),其中的日期為1970年1月1日。
除了直接從日期時(shí)間類型的數(shù)據(jù)中獲取各個(gè)分量,還有一些函數(shù)可以用來(lái)獲得日期相關(guān)的數(shù)據(jù)。
使用day@w(),在獲取日期分量時(shí)添加@w選項(xiàng),可以獲得本日是一周中的第幾天:
A | B | C | |
1 | 2019-4-3 | 2019-6-18 | 2020-2-20 |
2 | =day@w(A1) | =day@w(B1) | =day@w(C1) |
3 | =string(A1,"EEEE") | =string(B1,"EEEE") | =string(C1,"EEEE") |
A2,B2和C2獲取各個(gè)日期分別是一周中的第幾天,結(jié)果如下:
SPL中,每周的第1天是從周日開(kāi)始計(jì)算的,在第3行中用顯示字符串的方式取得了每一天是星期幾:
另外,我們還可以使用pdate() 函數(shù),配合不同的選項(xiàng)獲得日期
A | B | C | |
1 | 2019-8-17 | ||
2 | =pdate@w(A1) | =pdate@m(A1) | =pdate@q(A1) |
3 | =pdate@we(A1) | =pdate@me(A1) | =pdate@qe(A1) |
在pdate() 函數(shù)中:
○?? 直接使用@w選項(xiàng)可以獲得本周第1天的日期,從周日開(kāi)始計(jì)算;
○?? 添加@m選項(xiàng)可以獲得本月第1天的日期;
○?? 添加@q選項(xiàng)可以獲得本季度第1天的日期;
○?? 添加@e則可以獲得某個(gè)時(shí)間段最后一天的數(shù)據(jù),如本周最后一天,本季度最后一天等。A2,B2,C2,A3,B3和C3中的結(jié)果依次如下:
SPL中還可以使用days() 函數(shù)計(jì)算某日期所在月的總天數(shù),添加@q選項(xiàng)可以得到所在季度的總天數(shù),添加@y選項(xiàng)可以得到整年的總天數(shù),如:
A | B | C | |
1 | 2019-02-21 | ||
2 | =days(A1) | =days@q(A1) | =days@y(A1) |
A2,B2和C2中的結(jié)果如下:
除了直接從日期時(shí)間數(shù)據(jù)中獲取信息,在SPL中還可以使用日期時(shí)間類數(shù)據(jù)來(lái)執(zhí)行各類計(jì)算。
最常用的有關(guān)日期的計(jì)算就是計(jì)算年齡:
A | B | C | |
1 | 1995-3-30 | =now@d() | |
2 | =age(A1) | =age@m(A1) | =age@y(A1) |
A1和B1中的數(shù)據(jù)如下:
在第2行用age() 函數(shù),根據(jù)A1中的生日來(lái)計(jì)算年齡,計(jì)算年齡時(shí),是以當(dāng)前的日期為準(zhǔn)的,默認(rèn)情況將精確到日,添加@m可以將精度設(shè)為月,添加@y可以將精度設(shè)定為年。在不同精度的情況下,計(jì)算所得的年齡可能會(huì)有區(qū)別,A2,B2和C2中得到的年齡分別如下:
使用age() 函數(shù),類似于計(jì)算生日日期和當(dāng)前日期間隔的年數(shù)。更普遍的計(jì)算時(shí)間間隔的函數(shù)是interval() 函數(shù),用這個(gè)函數(shù)可以計(jì)算兩個(gè)日期時(shí)間數(shù)據(jù)之間相差多少天,添加@y,@q,@m,@s,@ms等選項(xiàng),可以計(jì)算間隔多少年,季度,月,秒或毫秒。例如:
A | B | C | |
1 | 1995-4-30 | 2019-4-10 | |
2 | =interval(A1,B1) | =interval@y(A1,B1) | =B1-A1 |
如果只需要計(jì)算兩個(gè)日期之間相差多少天,也可以直接用減法完成,A2,B2和C2中的結(jié)果如下:
特別的,每個(gè)日期時(shí)間數(shù)據(jù)都可以轉(zhuǎn)換為一個(gè)對(duì)應(yīng)的長(zhǎng)整數(shù),這個(gè)長(zhǎng)整數(shù)其實(shí)就是指定的日期時(shí)間和1970年1月1日,格林威治時(shí)間0:00:00的間隔毫秒數(shù),如:
A | B | |
1 | =datetime("1/1/1970 0:00:00 ? GMT","m/d/yyyy H 另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。 分享文章:SPL的日期時(shí)間函數(shù)-創(chuàng)新互聯(lián) 轉(zhuǎn)載來(lái)源:http://weahome.cn/article/gpjos.html 其他資訊 |