请问,as.Date(),as.POSIXct()函数都识别不了月份的英文,是为啥呀?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问,as.Date(),as.POSIXct()函数都识别不了月份的英文,是为啥呀?相关的知识,希望对你有一定的参考价值。

就是在控制台输入 as.Date("27-July-2012",format="%d-%B-%Y"),得到的是NA,而不是2012-07-27. 然后,as.POSIXct函数也是这样。

参考技术A 就是在控制台输入 as.Date("27-July-2012",format="%d-%B-%Y"),得到的是NA,而不是2012-07-27. 然后,as.POSIXct函数也是这样。

DST 前后的 POSIXct 时间?

【中文标题】DST 前后的 POSIXct 时间?【英文标题】:POSIXct times around DST? 【发布时间】:2010-11-26 14:24:13 【问题描述】:

我想从 POSIX 日期中减去 1 天,并在 DST 前后同时结束。

例如,当我添加一天时:

> as.POSIXct('2009-03-08 23:00:00.000') + 86400
[1] "2009-03-09 23:00:00 EDT"

但是当我过去时,它会偏移:

> as.POSIXct('2009-03-08 23:00:00.000') - 86400
[1] "2009-03-07 22:00:00 EST"

处理夏令时前后绝对时差的最佳方法是什么?通常我通过将时间转换为字符串并分别处理它们来处理这个问题,这样就不会应用 DST。

【问题讨论】:

【参考方案1】:

您的代码完全按照您的要求执行,因为您没有要求它加减一天,而是要求它加减24 小时2009-03-08 23:00:00 EDT 之前的 24 小时(86400 秒) 2009-03-07 22:00:00 EST。我不熟悉 R 库,但我熟悉它们包装的 POSIX 函数。如果您使用 POSIXct,将其 day 属性减 1,然后通过 POSIXlt 将其“重新转换”为 POSIXct(以确保例如 2 月 -1 日变为 1 月 31 日),那么您应该能够减去一天可靠。

【讨论】:

【参考方案2】:

将日期时间存储为 UTC - 或者在这种情况下转换为 UTC 减去一天并转换回本地时间。 (这忽略了闰秒)

【讨论】:

如果我转换为 UTC,减去一天,然后再转换回来,我将得到相同的偏移量,因为转换中仍应用 DST。对吗? 如果在 DST 的第一天,则取决于实际日期,否则没有。但将所有日期时间视为 UTC,并且仅在最后一刻格式化为本地时间【参考方案3】:

感谢霍布斯!我需要做更多的工作,但在 POSIXlt 中从天槽中减去:

> a <- as.POSIXct('2009-03-08 23:00:00.000')
> as.POSIXlt(a)
[1] "2009-03-08 23:00:00 EDT"
> a <- as.POSIXlt(a)
> a$mday <- a$mday -1
> a
[1] "2009-03-07 23:00:00 EDT"

【讨论】:

【参考方案4】:

如果你只是想计算天数,你可以使用trunc来移动天数:

> trunc(Sys.time(), "day") + 86400
[1] "2009-09-13 PDT"
> trunc(Sys.time(), "day") - 86400
[1] "2009-09-11 PDT"

【讨论】:

【参考方案5】:

lubridate 提供了两个额外的时间跨度类,它们指定了基本包中有些不清楚的内容。来自手册:

持续时间

持续时间测量两个瞬间之间发生的确切时间量。如果闰秒、闰年或夏令时 (DST) 发生变化,这可能会在时钟时间方面产生意外结果。

期间

周期衡量两个瞬间之间发生的时钟时间变化。在存在闰秒、闰年和 DST 变化的情况下,周期可提供对时钟时间的可靠预测。

【讨论】:

以上是关于请问,as.Date(),as.POSIXct()函数都识别不了月份的英文,是为啥呀?的主要内容,如果未能解决你的问题,请参考以下文章

R语言构建仿真数据(time series)ggplot2时间序列数据可视化(坐标轴包含时分秒信息)as.date只会将数据解析为日期date为了解析到时分秒需要使用as.posixct函数

R中从POSIXct到日期的日期转换

在 R 中转换 POSIXct 会在 3.5.0 版中产生 NA [重复]

R语言:时间的转化

在 R 中使用 as.POSIXct 为相同的字符结构提供 na

DST 前后的 POSIXct 时间?