> 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"
日期/时间 格式
格式 | 意义 | 示例 |
---|---|---|
%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 |
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(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秒"
用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"
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"
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函数的参数,用于 格式化输出字符串
> 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
> 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
weekdays()取日期对象所处的周几;
months()取日期对象的月份;
quarters()取日期对象的季度;
> mydate <- Sys.Date()
> mydate
[1] "2017-02-27"
> weekdays(mydate)
[1] "星期一"
> months(mydate)
[1] "二月"
> quarters(mydate)
[1] "Q1"
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。