【问题标题】:How to convert unix timestamp (milliseconds) and timezone in R?如何在 R 中转换 unix 时间戳(毫秒)和时区?
【发布时间】:2015-06-25 12:42:44
【问题描述】:

我的数据有两列 timetimezone 有事件的时间戳。例如:

time               timezone
1433848856453      10800000

似乎时间戳在信息中也有小数秒。我不了解时区格式,但它必须是等效的 unix 格式。我还需要保留小数秒。我如何从那个到 R 中的东西?

2015-01-01 13:34:56.45 UTC

注意:这个人类可读的日期不是显示的 unix 时间戳的实际转换值。

【问题讨论】:

  • timezone 列也有负值?无论如何,我认为 Joshua 对如何解释 timezone 有一个非常好的想法;毫秒 + 或 - 时区的小时数。

标签: r datetime unix-timestamp timestamp-with-timezone


【解决方案1】:

看起来timezone 列是时区偏移量,以毫秒为单位。我认为这意味着时区列将手动调整夏令时

因此,您应该在转换为 POSIXct 之前添加 timetimezone 列。您还应该将tz 设置为"UTC",这样就不会对您的POSIXct 对象进行夏令时调整。

R> time <- 1433848856453
R> timezone <- 10800000
R> options(digits.secs=3)
R> .POSIXct((time+timezone)/1000, tz="UTC")
[1] "2015-06-09 14:20:56.453 UTC"

【讨论】:

  • 我不是 R 方面的专家,但我有点困惑,为什么要输入时区... Unix 时间戳已经足够定义一个时刻。这些 R 函数是否有某些东西不能考虑 DST 调整?
  • @Teo:问题在于时区偏移量没有定义时区,因此 R 无法知道 DST 调整何时发生(有几个时区是 UTC+3,它们可能或者可能没有不同的 DST 规则)。这就是为什么我说我假设时区列将反映 DST 调整。
  • 时区偏移量可能没有定义时区,但应该在机器的语言环境/时间设置中定义时区。例如,Javascript 知道 DST 可能会或可能不会发生在本地时区(据我所知和测试)。因此,即使是 5 年前,在 Javascript 中获取 Date 对象也将考虑 DST,并且应该相应地转换为 UTC。我只是好奇 R 是否也能做到这一点。 IMO 不太好的地方是,如果您真的需要考虑特定时区(明确)将 Unix 时间戳转换为 UTC 时间:) - 我假设 UTC 从未受到 DST 的影响
  • @Teo:是的,(通常)操作系统定义了一个时区,R 尝试使用它。我调整了时区偏移的 Unix 时间戳,并将 POSIXct 对象的时区设置为 UTC,这样它就代表了测量的本地时间,而不是在 UTC+3 测量的 my 本地时间。您可以通过.POSIXct(time) 获取本地时间的 Unix 时间,但我不确定 OP 更喜欢哪个。
  • 好的,所以我猜你是说 UTC 实际上不是显示时间的时区,而是 UTC+[给定的偏移量]。如果是这种情况,我理解..虽然在答案中不显示“+offset”可能有点误导。感谢您的解释!
【解决方案2】:

我认为这可能适合您。

aa <- 1433848856453
as.POSIXct(aa/1000, origin="1970-01-01")
[1] "2015-06-09 13:20:56.453 CEST"

编辑

现在我意识到由于我的个人设置,我的代码不可重现,但这可以修复它并让您实现目标。

options(digits.secs=6)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 2019-03-03
    相关资源
    最近更新 更多