【问题标题】:Converting numeric time to datetime POSIXct format in R在R中将数字时间转换为日期时间POSIXct格式
【发布时间】:2014-08-21 22:31:58
【问题描述】:

我有一个数据框,其中包含已读入 R 的日期时间列。时间值显示为数字时间,如下面的数据示例所示。我想将这些转换成日期时间POSIXct或POSIXlt格式,以便查看日期和时间。

tdat <- c(974424L, 974430L, 974436L, 974442L, 974448L, 974454L, 974460L, 974466L, 974472L,
          974478L, 974484L, 974490L, 974496L, 974502L, 974508L, 974514L, 974520L, 974526L,
          974532L,974538L)

974424 应该等于00:00:00 01/03/2011,但不知道数值的起源时间(即下面使用的 1970-01-01 不起作用)。我曾尝试使用如下命令来实现这一点,并花了一些时间试图让as.POXISct 工作,但我还没有找到解决方案(即我要么最终得到一个 POSIXct 的 NAs 对象,要么最终变得晦涩难懂日期时间值)。

尝试将数字时间转换为日期时间:

datetime <- as.POSIXct(strptime(time, format = "%d/%m/%Y %H:%M:%S"))
datetime <- as.POSIXct(as.numeric(time), origin='1970-01-01') 

我确信这是一件简单的事情。任何帮助都会受到极大的欢迎。谢谢!

【问题讨论】:

  • 这些时间值是小时、分钟还是秒?如果您不知道起始时间,则必须知道这一点才能进行转换。
  • @Theodore:他们应该以小时为单位。日期时间值应如此运行 00:00:00 01/03/2011、06:00:00 01/03/2011、12:00:00 01/03/2011、18:00:00 01/03/2011 , 00:00:00 02/03/2011 等等(6 小时间隔)。

标签: r datetime numeric posixct


【解决方案1】:

根据您想要的时区尝试其中一种:

t.gmt <- as.POSIXct(3600 * (tdat - 974424), origin = '2011-03-01', tz = "GMT") 

t.local <- as.POSIXct(format(t.gmt))

【讨论】:

  • 谢谢。日期时间值应从 00:00:00 01/03/2011 以 6 小时间隔运行,即 06:00:00 01/03/2011、12:00:00 01/03/2011、18:00:00 01 /03/2011, 00:00:00 02/03/2011 等等。我将如何调整上面的代码来实现这一点?目前它以分钟而不是小时为单位给出间隔:即“2011-01-03 00:00:00 GMT”“2011-01-03 00:00:06 GMT”“2011-01-03 00:00:12 GMT” ”。谢谢!
  • @jjulip 如果tdat 以6 小时为间隔,那么在第一行只需将tday-974424 乘以60*6 即可转换为分钟。
  • @jjulip,查看修改后的答案。
  • 令人惊讶。我的数值(2019 年)的范围约为 43,000。这可能是什么单位?
  • @Lazarus,自 1900 年 1 月 1 日以来的日子?类似于 Excel。
猜你喜欢
  • 1970-01-01
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
相关资源
最近更新 更多