2016-12-09 151 views
0

我正在尝试编写这些日期和时间以进行分析。时间非常棘手,因为它在立陶宛的军事时间(比美国快10个小时)。我的问题是如何将时间转换为正确的美国时间?另外,如何将列分成两列,分隔日期和时间?在R中处理日期和时间

这里是我的示例数据:

a <- c("10/4/2016 21:11","10/11/2016 19:53" ,"9/16/2016 0:39", 
    "8/17/2016 21:46","11/16/2016 9:37","11/29/2016 16:14", 
    "10/7/2016 20:14","9/16/2016 0:27","9/27/2016 23:10", 
    "2/24/2015 20:37","11/8/2016 21:05","5/25/2016 1:30", 
    "8/5/2016 0:41","8/22/2016 23:02","5/25/2016 0:43", 
    "9/28/2016 22:17","9/14/2016 22:58","8/25/2016 18:10","10/10/2016 16:55" ,"10/7/2016 0:11") 

df <- data.frame(Date=a, stringsAsFactors = F) 

我想:

>df 
    Date  Time 
1 2016-10-04 9:11 PM 
2 2016-10-11 6:53 PM 
3 2016-09-16 1:39 AM 
4 2016-08-17 9:46 PM 
+0

通常情况下,我们希望有一个统一的日期时间,但我想这个请求是不是新的。在进一步提问之前,你应该做更多的搜索。时间在输入阶段以UCT时间存储,并且输出允许tz与tz和usetz参数“移动”以格式化。 –

回答

0

了解格式化日期时间值的地方是?strptime。大部分htat知识适用于as.Date和format.Date和format.POSIXt函数。对于时间的显示,你需要做正确的输入,然后做输出:

df2 <- data.frame(Date=as.Date(df$Date, format="%m/%d/%Y"), 
       Time=format(as.POSIXct(df$Date, format="%m/%d/%Y %H:%M"), 
           format="%I:%M %p")) 
> df2 
     Date  Time 
1 2016-10-04 09:11 PM 
2 2016-10-11 07:53 PM 
3 2016-09-16 12:39 AM 
4 2016-08-17 09:46 PM 
5 2016-11-16 09:37 AM 
snipped output 

每个"%_"上的项目?strptime帮助页面的单独条目进行说明。您可以添加像“?”,“:”这样的文字,以及使模式匹配过程正确发生所需的空格。如果你的格式更不规则,那么lubridate -package有一些额外的功能。还有chron-packages允许分离时间和日期,但似乎现在看起来并没有那么多。

这显示了如何在立陶宛军队的时间和输出New_York时间阅读:

df2 <- data.frame(Date=as.Date(df$Date, format="%m/%d/%Y"), 
        Time=format(as.POSIXct(df$Date, format="%m/%d/%Y %H:%M", 
              usetz=TRUE, tz="Etc/GMT-2"), # input 
           "%I:%M %p", tz="EST5EDT")) # output 

也可以在输入级使用tz="Europe/Vilnius"。固定偏移量不会适应DST变化,而“欧洲/维尔纽斯”选择会(取决于您的Olson数据库支持的系统配置)。

+1

此外,为了处理时区差异,例如可以从'lubridate'包中使用'with_tz()'函数(在解析期间正确定义立陶宛时区之后)。有效的时区列表可以通过执行'OlsonNames()' – mpjdem

+0

找到你知道如何考虑10小时的时差吗? – mikeymike

+1

阅读它作为立陶宛时间,也许像tz =“Etc/GMT-3”这样的东西,并使用'format(..)'作为输出,如我对你的问题的评论中所述。 (这个信息应该可以通过一些搜索来获得,mpjdem给了你另一个有用的资源:'lubridate :: with_tz'。) –