R语言中的时间与日期

来源:互联网 发布:爱心地图的软件 编辑:程序博客网 时间:2024/06/05 20:22

                                                                                                          R 中的日期与时间

一:储存格式

  R中的三种日期储存格式分别为POSIXct,POSIXlt和DATE格式,三种格式之间可以使用as.POSIXct,as.POSIXlt,as.DATE进行互换。(如果不指定格式,as.date将会输出一个%y%m%d形式的的date)

  注意,Sys.time返回的是一个以POSIXct形式的系统时间。在加载完lubridate之后,可以使用today()函数,得到一个date形式的系统日期。

二:格式的转换

  外界输入的字符串需要被解析成标准格式后,R才能对其使用时间函数。

  使用strptime()函数进行标准化,得到一个POSIXlt形式的输出。

  Strptime()的一般形式是:

  Strptime(时间字符串,”由%- 等组成的格式”,tz时区设置)

  相反的过程称之为格式化日期,就是把标准化的日期输出成某个格式的日期。

  使用strftime()函数进行格式化,strftime()的一般形式是:

Strftime(标准化的日期,”自由定义的格式”,时区设置),这个“自由定义的格式”有多自由呢?他可以以一个句子的形式出现,比如“It is %Y-%m-%d,%H:%M:%S”,也可以使用其他输出形式,比如%I是十二小时制的小时数,%p是am,pm,%A是星期几,%B是月份。

三:时区的设置

  Strftime()输出的时候不能对POSIXlt形式的的日期改变时区,对其他形式的是可以的。

  设置时区有三种方式:

1,  tz=America/Los_Angeles

2,  tz=”UTC”或者”GMT”或者“EST”

3,  tz=”UTC+2:30”

 四:日期、时间的运算

 1, POSIXct +numeric,numeric代表的是秒;同理,POSIXlt +numeric中,numeirc代表的也是秒,但DATE+numeric,numeric代表的是天数。

2, 两个日期相减代表两个日期之间的差额。相加则没有什么意义。

  可以直接相减,也可以用difftime()函数来实现

  Difftime(被减数,减数,units=months/weeks···secs),

3, Seq函数可以用来生成时间序列,它的形式是:

Seq(开始日期,结束日期,by=步长)

4,      其他函数如repeat、mean、round、cut、summary也能对时间操作,效果不一,目前我还没有试过

五:lubridate包

1,  ymd家族函数:ymd,mdy,dym,ymd_h,ymd_hms等等

这些函数的作用就是标准化,用以取代strptime函数,以ymd函数为例,ymd(字符串),只要字符串中的日期顺序遵循年月日(也就是ymd),不管这些字符串日期有多“脏”,比如说“2015//12,03”,那么最终都会输出一个年月日的标准化时间“2015-12-03”,输出的格式是date,(如果是ymd_hms就是输出POSIXct形式的日期了)

2,  stamp函数用于取代strftime:

如果说strftime还需要用%D%Y之类的火星文制定输出的话,那么stamp可以自动识别输入语句的形式形成一个模板:

F <- stamp(“it is July 2013-3-21”),它自动识别为“it isJuly %Y-%m-%d”的模板函数,

F(某个日期)的输出结果就是按照上面的模板输出的

3,  时间范围的处理

A, duration类函数,d*(比如说dyears,ddays)

dyears(4),生成一个数字,是4*365*86400,它严格假设一年是365天,一天是86400秒,不考虑闰年,闰秒的情况

dyears(1:10)可以生成一个向量

B, period类函数,比如说years(),days()

这是按照日历来计数的,有时一年是365天,那么years(1)就是365天,若是闰年,years(1)就是366天了

C, interval类的函数,计算从开始到结束的一段间隔时间长度

使用new_interval(开始时间,结束时间)来创建一段interval

     注:

a:new_duration(),new_period()函数可以创建一些更加复杂的duration类和period类函数,这一点目前我也不知道

b:as,period()可以把其他类型的日期转换为period,也有as.duration函数和as.interval函数可以用,其中as.interval()和new_interval()效果一样。

D, 日期 %--% 日期 这种形式可以迅速创建一个interval,

同时,日期 %within% interval 这种形式可以判断该日期是否在这个Interval之内

4,  lubridate中对时区的处理

A, with_tz(日期,tz设置)可以直接改变日期的时区,不需要转换日期格式,你如果是用strftime函数的话还得先把日期转换为POSIXlt形式的,太麻烦了

B, force_tz()用于更新不正确的时区,目前我也不知道这是啥意思

C,         olsen_time_zones()用于获得具有olson风格的时区列表

olson_time_zones(“longitude”)得到按照经线顺序排列的时区列表,是按照大洲/城市的形式出现的

啥是olson风格,大概是按照大洲/代表城市的就是olson风格,目前代表中国的城市是,哈尔滨(长白时区),上海(中原时区),重庆(陇蜀时区),乌鲁木齐(新藏时区),喀什(昆仑时区)

D,         floor_date(日期,unit) unit比如说是年月日什么的,

   floor_date(2014-3-12,”year”)将会得到2014-01-01,就是这一日期按照年计算的最低值

  ceiling_date()正好相反,ceiling(2014-03-14,”year”)将会得到2015-01-01

      

 

 

原创粉丝点击