R語言中的時間與日期

2021-08-09 14:57:28 字數 2926 閱讀 9972

r 中的日期與時間

一:儲存格式

r中的三種日期儲存格式分別為posixct,posixlt和date格式,三種格式之間可以使用as.posixct,as.posixlt,as.date進行互換。(如果不指定格式,as.date將會輸出乙個%y%m%d形式的的date)

注意,sys.time返回的是乙個以posixct形式的系統時間。在載入完lubridate之後,可以使用today()函式,得到乙個date形式的系統日期。

二:格式的轉換

外界輸入的字串需要被解析成標準格式後,r才能對其使用時間函式。

使用strptime()函式進行標準化,得到乙個posixlt形式的輸出。

strptime()的一般形式是:

strptime(時間字串,」由%- 等組成的格式」,tz時區設定)

相反的過程稱之為格式化日期,就是把標準化的日期輸出成某個格式的日期。

使用strftime()函式進行格式化,strftime()的一般形式是:

strftime(標準化的日期,」自由定義的格式」,時區設定),這個「自由定義的格式」有多自由呢?他可以以乙個句子的形式出現,比如「it is %y-%m-%d,%h:%m:%s」,也可以使用其他輸出形式,比如%i是十二小時制的小時數,%p是am,pm,%a是星期幾,%b是月份。

三:時區的設定

strftime()輸出的時候不能對posixlt形式的的日期改變時區,對其他形式的是可以的。

設定時區有三種方式:

1,  tz=america/los_angeles

2,  tz=」utc」或者」gmt」或者「est」

3,  tz=」utc+2:30」

四:日期、時間的運算

1, posixct +numeric,numeric代表的是秒;同理,posixlt +numeric中,numeirc代表的也是秒,但date+numeric,numeric代表的是天數。

2, 兩個日期相減代表兩個日期之間的差額。相加則沒有什麼意義。

可以直接相減,也可以用difftime()函式來實現

difftime(被減數,減數,units=months/weeks···secs),

3, seq函式可以用來生成時間序列,它的形式是:

seq(開始日期,結束日期,by=步長)

4,      其他函式如repeat、mean、round、cut、summary也能對時間操作,效果不一,目前我還沒有試過

五:lubridate包

1,  ymd家族函式:ymd,mdy,dym,ymd_h,ymd_hms等等

這些函式的作用就是標準化,用以取代strptime函式,以ymd函式為例,ymd(字串),只要字串中的日期順序遵循年月日(也就是ymd),不管這些字串日期有多「髒」,比如說「2015//12,03」,那麼最終都會輸出乙個年月日的標準化時間「2015-12-03」,輸出的格式是date,(如果是ymd_hms就是輸出posixct形式的日期了)

2,  stamp函式用於取代strftime:

如果說strftime還需要用%d%y之類的火星文制定輸出的話,那麼stamp可以自動識別輸入語句的形式形成乙個模板:

f <- stamp(「it is july 2013-3-21」),它自動識別為「it isjuly %y-%m-%d」的模板函式,

f(某個日期)的輸出結果就是按照上面的模板輸出的

3,  時間範圍的處理

a, duration類函式,d*(比如說dyears,ddays)

dyears(4),生成乙個數字,是4*365*86400,它嚴格假設一年是365天,一天是86400秒,不考慮閏年,閏秒的情況

dyears(1:10)可以生成乙個向量

b, period類函式,比如說years(),days()

這是按照日曆來計數的,有時一年是365天,那麼years(1)就是365天,若是閏年,years(1)就是366天了

c, interval類的函式,計算從開始到結束的一段間隔時間長度

使用new_interval(開始時間,結束時間)來建立一段interval

注:a:new_duration(),new_period()函式可以建立一些更加複雜的duration類和period類函式,這一點目前我也不知道

b:as,period()可以把其他型別的日期轉換為period,也有as.duration函式和as.interval函式可以用,其中as.interval()和new_interval()效果一樣。

d, 日期 %--% 日期 這種形式可以迅速建立乙個interval,

同時,日期 %within% interval 這種形式可以判斷該日期是否在這個interval之內

4,  lubridate中對時區的處理

a, with_tz(日期,tz設定)可以直接改變日期的時區,不需要轉換日期格式,你如果是用strftime函式的話還得先把日期轉換為posixlt形式的,太麻煩了

b, force_tz()用於更新不正確的時區,目前我也不知道這是啥意思

c,         olsen_time_zones()用於獲得具有olson風格的時區列表

olson_time_zones(「longitude」)得到按照經線順序排列的時區列表,是按照大洲/城市的形式出現的

啥是olson風格,大概是按照大洲/代表城市的就是olson風格,目前代表中國的城市是,哈爾濱(長白時區),上海(中原時區),重慶(隴蜀時區),烏魯木齊(新藏時區),喀什(崑崙時區)

d,         floor_date(日期,unit) unit比如說是年月日什麼的,

floor_date(2014-3-12,」year」)將會得到2014-01-01,就是這一日期按照年計算的最低值

ceiling_date()正好相反,ceiling(2014-03-14,」year」)將會得到2015-01-01

時間與日期

通常確定時間和日期對乙個程式來說是很有用的,程式可能希望記錄執行時間.或者在某一時間後改變執行方式.例如乙個遊戲可能需要玩家在倒計時內完成某個任務 所有的 系統都使用同一時間和日期起點 格林威治時間 1970年1月1日.而 紀元開始於1980年.時間通過乙個長整型的預定義型別time t來表示,它和...

c 時間與日期

注意c 11有更強大的方法!隨機數及atoi include int abs int num 功能 函式返回引數num.的絕對值。double atof const char str 功能 將字串str轉換成乙個雙精度數值並返回結果。int atoi const char str 功能 將字串str...

Linux C 時間與日期

linux下儲存時間常見的有兩種儲存方式,乙個是從1970年到現在經過了多少秒,乙個是用乙個結構來分別儲存年月日時分秒的。time t 這種型別就是用來儲存從1970年到現在經過了多少秒,要想更精確一點,可以用結構struct timeval,它精確到微妙。struct timeval 而直接儲存年...