【问题标题】:as.POSIXlt ignores tz argumentas.POSIXlt 忽略 tz 参数
【发布时间】:2016-04-21 11:28:05
【问题描述】:

非常基本,只是不理解 tz 参数的用途,如果不是为了这个......

dateIWantToConvert <- as.Date("2013-06-01") #the format of my starting object

as.POSIXlt(dateIWantToConvert, tz="America/Chicago")
[1] "2013-06-01 UTC"

一个data.frame中有很多这样的东西,所以效率很重要。

【问题讨论】:

  • tz 参数用于传递 as.POSIXlt 字符串,而不是 date 对象。 date 对象已有时区,因此 as.POSIXlt 中的 tz 值将被忽略。
  • @Mekki: attributes(as.Date("2013-06-01")) 不显示 tzone 属性。如何确定date、POSIXct 或 POSIXlt 的时区
  • @DaveX 我不确定。整个事情是一团糟。 DateTimeClasses 帮助文件内容丰富且难以理解。用户感到非常沮丧,我希望这将成为尽快修改的优先事项。

标签: r


【解决方案1】:

更可靠的方法是使用strptime。这需要来自OlsonNames() 的任何tz 争论。可靠,我的意思是这应该是独立于操作系统的。

(vec.Date <- strptime("2013-06-01", format = "%Y-%m-%d", tz = "America/Chicago"))
# "2013-06-01 CDT"
class(vec.Date)
# [1] "POSIXlt" "POSIXt" 

对于您关于效率的问题,您确实应该使用strptime。见Difference between as.POSIXct/as.POSIXlt and strptime for converting character vectors to POSIXct/POSIXlt

【讨论】:

    【解决方案2】:

    你可以不使用as.Date()

    > as.POSIXlt("2013-06-01", tz="America/Chicago")
    #[1] "2013-06-01 CDT"
    

    【讨论】:

    • 假设它已经是 as.Date()ed,我在示例中包含了它,因为我的原始对象是这种格式。我将进行编辑,以便更清楚。
    • ?POSIXlt 声明“没有时间的日期被视为 UTC 午夜。”因此,如果您提供的参数已经是“日期”格式,它会将 tz 包含为 UTC(这似乎会覆盖其他规范)。
    • 如果他们已经是as.Date()ed,无论在何处创建该对象,请确保它具有时间和时区组件。请参阅我的答案的更新。
    • @MekkiMacAulay 我认为Date 对象没有时区。至少,文档中没有任何提示。
    【解决方案3】:

    根据?timezones,无效时区通常被视为UTC,而不会发出警告。您的特定环境可能不知道如何解释“美国/芝加哥”。文档指出它不一致。

    尝试使用"CDT" 而不是“美国/芝加哥”。或者,?timezones 中有关于如何向 R 提供要解释的时区格式列表的详细信息。

    更新:as.Date 返回一个“日期”对象,而不是字符串。 as.POSIXlt 将引用:“没有时间的日期被视为在 UTC 午夜”,来自 as.POSIXlt。因此,如果xas.POSIXlt 中的date 对象并且它没有时间值,则tz 选项将被忽略并替换为UTC

    因此,另一种选择是确保传递给as.POSIXltdate 对象已经指定了时间和时区。或者,在将对象传递给as.POSIXlt 之前将其转换为字符串,以便它使用自己的tz 选项。

    【讨论】:

    • 但是,“美国/芝加哥”是OlsonNames() 列出的时区之一。就我而言,OP 的代码给出的结果与他得到的结果相同,但如果我省略 as.Date,我会得到预期的结果。 as.POSIXlt("2013-06-01", tz="America/Chicago")
    • 嗯,很有趣。我也是。正在调查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2011-12-01
    • 2013-06-14
    • 2015-05-13
    • 2018-01-12
    • 2019-02-22
    • 2020-02-27
    相关资源
    最近更新 更多