1、在R中日期实际是double类型,是从1970年1月1日以来的天数
> as.Date(0)
[1] "1970-01-01"
> typeof(Sys.Date())
[1] "double"
# 输出星期
> weekdays(as.Date(1))
[1] "星期五"
> weekdays(as.Date(2:3))
[1] "星期六" "星期日"
# 输出月份
> months(as.Date(1))
[1] "一月"
# 输出季度
> quarters(as.Date(1))
[1] "Q1"
# 日期转化为数值
> as.numeric(as.Date("2013-01-01"))
[1] 15706
# 创建一个日期序列
> dates <- seq(as.Date("2013-01-01"),as.Date("2013-01-8"), by = "1 day")
> dates
[1] "2013-01-01" "2013-01-02" "2013-01-03" "2013-01-04" "2013-01-05"
[6] "2013-01-06" "2013-01-07" "2013-01-08"
> weekdays(dates[4:7])
[1] "星期五" "星期六" "星期日" "星期一"
> business_days2 <- dates[!(weekdays(dates) %in% c('星期日','星期六'))]
> weekdays(business_days2[4:7])
[1] "星期五" "星期一" "星期二" NA
2、输出当前日期或者时间
#输出当前日期,当前日期为Double型
> today <- Sys.Date()
> today
[1] "2016-08-29"
#格式化日期为字符串
> format(today,"%Y年%m月%d日")
[1] "2016年08月29日"
#注意:这种方法返回的是字符串类型
> date()
[1] "Mon Aug 29 14:00:56 2016"
#取系统的时间
> Sys.timeDate()
GMT
[1] [2016-08-29 06:47:32]
#一个月的第一天
> timeFirstDayInMonth(Sys.timeDate())
GMT
[1] [2016-08-01]
#一个月的最后一天
> timeLastDayInMonth(Sys.timeDate())
GMT
[1] [2016-08-31]
#一周当中第几天
> dayOfWeek(Sys.timeDate())
2016-08-29 06:48:57
"Mon"
#一年当中的第几天
> dayOfYear(Sys.timeDate())
2016-08-29 06:49:21
242
3、字符转化为日期格式
#as.Date()可以将一个字符串转换为日期值,默认格式是yyyy-mm-dd。
> as.Date("2016-08-29")
[1] "2016-08-29"
# 显示为字符串,但实际是用double存储的
> as.double(as.Date("1970-01-01"))
[1] 0
#结果为0,是从1970年1月1日以来的天数。
#可以把定制的日期字符串转换为日期型
> as.Date("2007年2月1日","%Y年%m月%d日")
[1] "2007-02-01"
格式 |
意义 |
%Y |
年份,以四位数字表示,2007 |
%m |
月份,以数字形式表示,从01到12 |
%d |
月份中当的天数,从01到31 |
%b |
月份,缩写,Feb |
%b |
月份,完整的月份名,指英文,February |
%y |
年份,以二位数字表示,07 |
4、生成案例数据
> Dates <- c("2009-09-28","2010-01-15")
> Times <- c( "23:12:55", "10:34:02")
> charvec <- timeDate(paste(Dates, Times))
> timeDate(charvec)
GMT
[1] [2009-09-28 23:12:55] [2010-01-15 10:34:02]
# 如果你遇到案例时间数据样本1
> DT <- c("2014/4/11 8:00:00","2014/4/11 8:30:00")
> class(DT)
[1] "character"
> library(timeDate)
> DT.new <- timeDate (DT, format="%Y/%m/%d %H:%M:%S")
> class(DT.new)
[1] "timeDate"
attr(,"package")
[1] "timeDate"
> DT.new
GMT
[1] [2014-04-11 08:00:00] [2014-04-11 08:30:00]
# 如果你遇到案例时间数据样本2
> DT <- c("2014-4-11 8:00:00","2014/4/11 8:30:00")
> class(DT)
[1] "character"
> DT.new <-timeDate(DT, format="%Y-%m-%d %H:%M:%S")
> class(DT.new)
[1] "timeDate"
attr(,"package")
[1] "timeDate"
> DT.new
GMT
[1] [2014-04-11 08:00:00] [NA]
#自己写
DT2 <- seq(strptime('2014/4/11 0:00:00',"%Y/%m/%d %H:%M:%S"), by = "30 mins", length.out = 48)
# 2014/4/11 0:00:00 是数据开始的时间,by = "30 mins"表示数据的频率,length.out = 48表示数据的长度