R語言筆記-日期/時間處理函式
1.獲取當前日期/時間
- 獲取日期
> Sys.Date()
[1] "2017-02-24"
注意:在R中日期實際是double型別,是從1970年1月1日以來的天數
- 獲取時間
> date()
[1] "Fri Feb 24 17:23:35 2017"
注意:這種方法返回的是字串型別
> Sys.time()
[1] "2017-02-24 17:24:08 CST"
2. 把日期/時間輸出為字串
日期/時間 格式
格式 | 意義 | 示例 |
---|---|---|
%d | 數字表示的日期(0~31) | 01~31 |
%a | 縮寫的星期名 | Mon |
%A | 非縮寫星期名 | Monday |
%m | 月份(01~12 ) | 01~12 |
%b | 縮寫的月份 | Jan |
%B | 非縮寫月份 | January |
%y | 兩位數的年份 | 17 |
%Y | 四位數的年份 | 2017 |
%H | 時 | 00~23 |
%M | 分 | 00~59 |
%S | 秒 | 00~59 |
- format
today <- Sys.Date()
format(today, "%Y年%m月%d日")
[1] "2017年02月24日"
> time <- Sys.time ()
> format(time, "%Y年%m月%d日%H時%M分%S秒")
[1] "2017年02月24日17時54分21秒"
- as.character
> as.character(today, format="%Y年%m月%d日")
[1] "2017年02月24日"
>
> as.character(time, format="%Y年%m月%d日%H時%M分%S秒")
[1] "2017年02月24日17時54分21秒"
3. 字串轉為日期/時間
- as.Date()
用as.Date()可以將一個字串轉換為日期值,預設格式是yyyy-mm-dd。
對於規則的格式,則不需要用format指定格式;如果輸入的格式不規則,可以通過format指定的格式讀入;標準格式
> as.Date("2017-02-04")
[1] "2017-02-04"
> as.Date("2017/02/04")
[1] "2017-02-04"
另外,形式as.Date(x, origin) 返回自引數origin(引數值為一日期)起第x天。如as.Date(2, origin=”2017-02-04”)的返回結果為”2017-02-06”。
> as.Date(2, origin="2017-02-04")
[1] "2017-02-06"
- POSIX類
There are two basic classes of date/times. Class “POSIXct” represents the (signed) number of seconds since the beginning of 1970 (in the UTC time zone) as a numeric vector. Class “POSIXlt” is a named list of vectors representing
POSIXct 是以1970年1月1號開始的以秒進行儲存,如果是負數,則是1970年以前;正數則是1970年以後。
POSIXlt 是以列表的形式儲存:年、月、日、時、分、秒;
預設情況下,日期之前是以/或者-進行分隔,而時間則以:進行分隔;
輸入的標準格式為:日期 時間(日期與時間中間有空隔隔開)
時間的標準格式為:時:分 或者 時:分:秒;
如果輸入的格式不是標準格式,則同樣需要使用strptime函式,利用format來進行指定;
> mydate <- as.POSIXlt('2017-4-19 7:01:00')
> mydate
[1] "2017-04-19 07:01:00 CST"
> class(mydate)
[1] "POSIXlt" "POSIXt"
> mydate <- as.POSIXct('2017-4-19 7:01:00')
> mydate
[1] "2017-04-19 07:01:00 CST"
> class(mydate)
[1] "POSIXct" "POSIXt"
另外,形式as.POSIXct(x, origin) 返回自引數origin起的第幾秒。如as.POSIXct(1488522386, origin=”1970-01-01 00:00:00”)的返回結果為”2017-03-03 14:26:26 CST”,該用法可用於將UNIX時間轉為R中的時間。(本段 2017-03-03補充)
> as.POSIXct(1488522386, origin="1970-01-01 00:00:00")
[1] "2017-03-03 14:26:26 CST"
- strptime與strftime
strftime(x, format = “”, tz = “”, usetz = FALSE, …)
strptime(x, format, tz = “”)
format引數在strptime中為必選,在strftime中為可-1選
strptime強制包含時區,而strftime預設不設定時區。如果strftime設定usetz=TRUE,輸出結果就和strptime一樣(資料型別除外)
strptime得到的是時間型別資料,strftime得到字串。
> mydate <- strptime("30-01-2017", format = "%d-%m-%Y")
> mydate
[1] "2017-01-30 CST"
> class(mydate)
[1] "POSIXlt" "POSIXt"
> mydate <- strptime("20170130120005", format = "%Y%m%d%H%M%S")
> mydate
[1] "2017-01-30 12:00:05 CST"
> class(mydate)
[1] "POSIXlt" "POSIXt"
> mydate <- strftime("2017-01-30", format = "%d-%m-%Y")
> mydate
[1] "30-01-2017"
> class(mydate)
[1] "character"
注:strptime函式使用的是內部C語言函式轉換字串為時間;
而strftime本質上是字串格式化函式,先用as.POSIXlt將字串轉為時間,然後用format函式輸出字串。
至於format引數,strftime雖然最終使用了strptime,但format引數並沒有傳遞下去,而是作為format函式的引數,用於 格式化輸出字串
4. 日期/時間的算術運算
- 求日期差
> today <- Sys.Date()
> gtd <- as.Date("2017-01-01")
> today - gtd
Time difference of 57 days
> gtd <- as.Date("2017-03-01")
> today - gtd
Time difference of -2 days
- difftime()函式
用difftime()函式可以計算相關的秒數、分鐘數、小時數、天數、週數
> now <- Sys.time()
> myTime <- strptime("2017-02-01 12:00:08", format = "%Y-%m-%d %H:%M:%S")
> difftime(now, myTime)
Time difference of 25.95226 days
> difftime(now, myTime, units = "weeks")
Time difference of 3.707466 weeks
> difftime(now, myTime, units = "days")
Time difference of 25.95226 days
> difftime(now, myTime, units = "hours")
Time difference of 622.8543 hours
> difftime(now, myTime, units = "mins")
Time difference of 37371.26 mins
> difftime(now, myTime, units = "secs")
Time difference of 2242275 secs
5. 其他日期相關函式
weekdays()取日期物件所處的周幾;
months()取日期物件的月份;
quarters()取日期物件的季度;
> mydate <- Sys.Date()
> mydate
[1] "2017-02-27"
> weekdays(mydate)
[1] "星期一"
> months(mydate)
[1] "二月"
> quarters(mydate)
[1] "Q1"