R中日期处理

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表示数据的长度

你可能感兴趣的:(R中日期处理)