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
%H00~23
%M00~59
%S00~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"
  • 9
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值