【问题标题】:Parsing dates with parse_date_time: Why does "2004-04-04 02:00" fail?使用 parse_date_time 解析日期:为什么“2004-04-04 02:00”会失败?
【发布时间】:2017-03-10 06:33:20
【问题描述】:

我正在使用lubridate::parse_date_time 解析日期,但有些日期不起作用。例如,为什么2004-04-04 02:00 返回NA2004-04-04 01:002004-04-04 03:00 工作?

library("lubridate")
"2004-04-04 01:00" %>% parse_date_time(c("Ymd HM"), tz = "America/New_York")
"2004-04-04 02:00" %>% parse_date_time(c("Ymd HM"), tz = "America/New_York")
"2004-04-04 03:00" %>% parse_date_time(c("Ymd HM"), tz = "America/New_York")

这里有另外两个返回NA的例子:

"20110313 0240" %>% parse_date_time(c("Ymd HM"), tz = "America/New_York")
"20130310 0255" %>% parse_date_time(c("Ymd HM"), tz = "America/New_York")

我使用的是 lubridate 1.6.0 版。

【问题讨论】:

  • 夏令时变化...直接从 1:59 到 3:00

标签: r lubridate


【解决方案1】:

America/New_York 中没有 2004-04-04 02:00。在2004-04-04 01:59:59 EST 之后,时钟向前滴答到2004-04-04 03:00:00 EDT,开始夏令时。

您的时间戳可能存储在EST5 而不是America/New_York

> "2004-04-04 01:00" %>% parse_date_time(c("Ymd HM"), tz = "EST5") %>% with_tz("America/New_York")
[1] "2004-04-04 01:00:00 EST"
> "2004-04-04 02:00" %>% parse_date_time(c("Ymd HM"), tz = "EST5") %>% with_tz("America/New_York")
[1] "2004-04-04 03:00:00 EDT"

【讨论】:

  • 谢谢!有没有一种简单的方法可以检查并纠正错误值,以便将2004-04-04 02:00 记录为2004-04-04 03:00
  • 我用一个例子更新了答案,使用 EST5 时区解析时间戳。
猜你喜欢
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多