【问题标题】:strptime returns two NAs while it works fine before and afterstrptime 返回两个 NA,而它在前后都可以正常工作
【发布时间】:2018-06-21 03:15:58
【问题描述】:

我做错了什么??

我用

    dates<- strptime(dataframe$Measurement.Time,"%d.%m.%Y %H:%M",tz="")

将字符串转换为日期。这对 14780 次观测非常有效。但在两种情况下,它会返回 NA

这是一个有效的例子。摘录都来自同一个结果数据框。

head(dataframe.with.dates)
        date.time      Measurement.Time mü.mü.VWC.1 øC.Temp.1
1 2000-01-10 00:30:00  10.01.2000 0:30       -0.011      -0.6
2 2000-01-10 01:00:00  10.01.2000 1:00       -0.011      -0.6
3 2000-01-10 01:30:00  10.01.2000 1:30       -0.011      -0.6

这是我生成的数据框的摘录,显示了出错的两个结果:

subset(dataframe.with.dates,is.na(dataframe.with.dates$date.time))
          date.time Measurement.Time  mü.mü.VWC   øC.Temp
    9572      <NA>  29.03.2015 2:00      -0.011      -0.6
    9573      <NA>  29.03.2015 2:30      -0.011      -0.6

其中“date.time”在POSIXlt 中,“Measurement.time”是character 中的原始日期。

我检查了我从中获取数据的原始 .txt 文件,但找不到与上面和下面的测量值有任何差异。

【问题讨论】:

    标签: r strptime posixlt


    【解决方案1】:

    谷歌搜索“夏令时 2015 年 3 月 29 日”显示这是欧洲春季转换为夏令时的日期,例如:https://www.timeanddate.com/news/time/europe-starts-dst-2015.html

    时区是一场噩梦:我原以为使用tz="CET" 可以解决问题,但事实并非如此。 strptime(mt,"%d.%m.%Y %H:%M",tz="UTC+01:00") 没有抱怨,但它创造了 UTC 时间。使用tz="GMT" 并假装时间是标准的可能是最简单的,即使它们不是标准的......

    我确定有重复,但回答您的问题比找到它们更容易(我确实花了几分钟时间尝试)。

    【讨论】:

    • 对,这是在春季改为夏令时时不存在的小时。但是我的记录器没有考虑到这一点。它全年保持“冬季时间”。如何防止 strptime 切换到夏令时?
    • 是否使用tz="GMT" 帮助/得到你想要的?
    • 使用"UTC+01:00" 似乎最适合这个用例。您说,“但它会在 UTC 中创建时间”。如果不使用没有 DST 的时区,就无法创建 OP 想要的内容。春天没有所谓的“冬季时间”。相反,只需使用与 UTC 的冬季时间偏移。
    • @BenBolker:tz="GMT" 确实有帮助,它可以识别所有时间戳,“UTC”也是如此。但是它不是“我的”时区,对于我的应用程序来说很好@JoshuaUlrich:"UTC+01:00" 不被我的系统识别。它说"unknown timezone"
    • @Habesha:试试"UTC+0100"(没有冒号)。这就是?strptime 中的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2021-01-07
    • 2016-01-14
    • 2012-11-23
    相关资源
    最近更新 更多