【问题标题】:Change from date time to numeric AND back to date time in R从日期时间更改为数字并返回 R 中的日期时间
【发布时间】:2014-12-12 14:46:44
【问题描述】:

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

使用base 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" 

我尝试了一些变体,包括明确指定时区,但我一直在得到这种转变。

【问题讨论】:

  • 我无法重现这个(在将y -&gt; as.numeric(x) 中的分配修复为&lt;- 之后)。
  • read ?strptime : "%p : AM/PM 区域设置中的指示符。与 %I 结合使用,而不与 %H 结合使用" 我不知道它是否能解决您的问题,但仍然,您可以先将 %H 更改为 %I...
  • 感谢 CathG。我不会将 %p 与我自己的数据一起使用,这是基于先前链接的问题,以造福他人。我在所有尝试过的情况下都得到了这种转变,包括将%T 与我自己的数据一起使用。
  • 你的Sys.timezone() 是什么?
  • &gt; Sys.timezone() [1] "EST"

标签: r datetime


【解决方案1】:

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

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

【讨论】:

  • 一定是我系统里的东西&gt; x &lt;- as.POSIXct("9/27/2011 3:33:00", format="%m/%d/%Y %H:%M:%S", tz="EST")&gt; as.POSIXct(as.numeric(x), origin="1970-01-01",tz="EST")[1] "2011-09-27 08:33:00 EST"
  • 感谢您的关注,CathG。我会在家里验证我的系统,也许是办公室周围的其他系统,看看我是否可以缩小范围。
  • IT 将我的 R 版本从稍微过时的东西更新到了 3.1.0,问题就消失了。再次感谢您投入一点时间。
  • @joeln 感谢您告诉我!我很高兴你不再有这个问题,虽然它没有解释你为什么有它......(好吧,我猜只是一个版本问题!)
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
  • 2013-04-01
相关资源
最近更新 更多