在R中将日期时间转换为数字并再次转换回日期时间

6

鉴于其他人无法重现这个问题,如有任何关于可能导致我看到的这种情况的系统设置的猜测,将不胜感激。这是在由IT配置的工作PC上,但今晚我会与我的个人安装进行比较,然后更新问题。

使用基础R,我尝试读取日期和时间,转换为数字,然后再转换回日期时间。我遇到的问题是+5小时的偏移量,我认为是由于时区默认值引起的。

从之前的一个问题中,提供了一个将日期时间转换为数字的示例:Change from date and hour format to numeric format

> x <- as.POSIXct("9/27/2011  3:33:00 PM", format="%m/%d/%Y  %H:%M:%S %p")
> x
[1] "2011-09-27 03:33:00 EDT"
> y <- as.numeric(x)
[1] 1317108780

*以上代码中的错别字已经修正

当我尝试将这个转换成日期时间时,我得到了:

> z <- as.POSIXct(y, origin="1970-01-01")
> z
[1] "2011-09-27 08:33:00 EDT" 

我尝试了一些变体,包括明确指定时区,但始终出现这种偏移。


3
在将分配操作从y -> as.numeric(x) 更改为 <- 后,我无法再现这个问题。 - Roland
阅读 ?strptime:"%p:本地区域中的AM / PM指示符。与%I一起使用,而不是与%H一起使用"。我不知道它是否能解决你的问题,但你可以从将%H更改为%I开始... - Cath
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - joeln
你的 Sys.timezone() 是什么? - Cath
> Sys.timezone() [1] "EST"> Sys.timezone() 表示系统时区为“EST”。 - joeln
你看到我发布的答案了吗?如果在第一次调用 as.POSIXct 时指定了 tz,那么你是否有5小时的偏移量? - Cath
1个回答

5

我认为这只是指定时区的问题:

x <- as.POSIXct("9/27/2011  15:33:00", format="%m/%d/%Y  %H:%M:%S")
> as.POSIXct(as.numeric(x), origin="1970-01-01",tz="EST") # as.numeric(x)=1317130380
[1] "2011-09-27 08:33:00 EST"

但是:

x <- as.POSIXct("9/27/2011  15:33:00", format="%m/%d/%Y  %H:%M:%S",tz="EST")
> as.POSIXct(as.numeric(x), origin="1970-01-01",tz="EST") # as.numeric(x)=1317155580
[1] "2011-09-27 15:33:00 EST"

备注:我将03:33:00 PM简化为15:33:00


我的系统可能有问题 > x <- as.POSIXct("9/27/2011 3:33:00", format="%m/%d/%Y %H:%M:%S", tz="EST") > as.POSIXct(as.numeric(x), origin="1970-01-01",tz="EST") [1] "2011-09-27 08:33:00 EST" - joeln
谢谢您的关注,CathG。我会在家里和办公室周围的其他人进行验证,看看能否将其缩小范围。 - joeln
IT更新了我的R版本,从稍微过时的版本升级到了3.1.0,问题得以解决。再次感谢您投入一点时间。 - joeln
@joeln 谢谢你让我知道!我很高兴你不再有这个问题了,虽然这并不能解释为什么你会有这个问题...(好吧,我猜只是一个版本问题!) - Cath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接