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"
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告