【问题标题】:Converting a character to a Date Time format in R在R中将字符转换为日期时间格式
【发布时间】:2015-08-21 10:33:25
【问题描述】:

不知道我在这里做错了什么。我正在尝试将字符转换为 POSIXct 日期格式并获得空值。以下是一些示例代码:

as.POSIXct(strptime("29-MAR-2015 01:14:32", format = "%d-%b-%Y %H:%M:%S"))

这给了我一个 NA。

上一个日期是三月。如果我将日期切换到四月,并重复相同的过程,这就是我得到的结果::

as.POSIXct(strptime("29-APR-2015 01:14:32", format = "%d-%b-%Y %H:%M:%S"))

我得到:“2015-04-29 01:14:32 IST”

为什么这种转换适用于 3 月的日期,而不适用于 4 月的日期?

【问题讨论】:

  • 无法重现错误。也许检查?Sys.setlocale
  • 原来它与时区有关,我所要做的就是将时区设置为数据来自的国家/地区。很抱歉我的愚蠢,很着急
  • @LorcanTreanor 没错!您在我回答时发表了该评论。你说对了。一般来说,如果有疑问,请使用GMT - 例如,如果您正在处理来自世界各地的数据,并且只需要清理一些日期格式(例如,实际时区无关紧要),您可以依靠GMT 来避免这个问题。我认为这是一个很好的问题!

标签: r datetime posix


【解决方案1】:

您不需要strptime。例如,尝试:

as.POSIXct("29-APR-2015 01:14:32", format = "%d-%b-%Y %H:%M:%S")

[1]“2015-04-29 01:14:32 EDT”

当然,我在不同的时区。

需要记住的一点是,由于“夏令时”等原因,某些时区不存在某些时间 - 例如,时钟会向前或向后“跳跃”1 小时;后一种情况在您的情况下没有问题(但重复了一个小时的混淆 b/c);上一个案例产生了一个问题,因为跳过了一个小时!

如何解决?指定没有夏令时的时区。例如,格林威治标准时间:

as.POSIXct("29-MAR-2015 01:14:32", format = "%d-%b-%Y %H:%M:%S", tz="GMT")

[1] "2015-03-29 01:14:32 GMT"

注意:我无法重现您的 IST 时区,所以这只是我的最佳猜测。尝试使用tz="GMT",或指定日期的实际时区(而不是依赖本地时区),这应该会有所帮助!

还解释了为什么其他人不能轻易复制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 2014-08-21
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    相关资源
    最近更新 更多