gpt4 book ai didi

r - 如何为 R 中的 3 个字母 tz 指定 POSIX(时间)格式,以便忽略它?

转载 作者:行者123 更新时间:2023-12-04 11:18:15 25 4
gpt4 key购买 nike

对于输出,规范为 %Z (见 ?strptime)。但是对于输入,它是如何工作的?

澄清一下,时区缩写最好能被 as.POSIXct() 解析成有用的信息。 ,但更核心的问题是如何让函数至少忽略时区。

这是我最好的解决方法,但是否有特定的格式代码要传递给 as.POSIXct()这将适用于所有时区?

times <- c("Fri Jul 03 00:15:00 EDT 2015", "Fri Jul 03 00:15:00 GMT 2015")
as.POSIXct(times, format="%a %b %d %H:%M:%S %Z %Y") # nope! strptime can't handle %Z in input

formats <- paste("%a %b %d %H:%M:%S", gsub(".+ ([A-Z]{3}) [0-9]{4}$", "\\1", times),"%Y")
as.POSIXct(times, format=formats) # works

编辑:这是最后一行的输出,以及它的类(来自单独的调用);输出符合预期。从控制台:
> as.POSIXct(times, format=formats)
[1] "2015-07-03 00:15:00 EDT" "2015-07-03 00:15:00 EDT"

> attributes(as.POSIXct(times, format=formats))
$class
[1] "POSIXct" "POSIXt"

$tzone
[1] ""

最佳答案

简短的回答是,“不,你不能。”这些是缩写,不能保证唯一标识特定时区。

例如,“EST”东部标准时间是美国还是澳大利亚? “CST”是美国或澳大利亚的中央标准时间,还是中国标准时间,还是古巴标准时间?

我只是注意到您不是在尝试解析时区缩写,而是在尝试避免使用它。我不知道有什么方法可以告诉 strptime忽略任意字符。我知道它会忽略格式字符串结束后时间的字符表示中的任何内容。例如:

R> # The year is not parsed, so the current year is used
R> as.POSIXct(times, format="%a %b %d %H:%M:%S")
[1] "2015-07-03 00:15:00 UTC" "2015-07-03 00:15:00 UTC"

除此之外,正则表达式是我能想到的唯一可以解决这个问题的方法。与您的示例不同,我将在输入字符向量上使用正则表达式来删除所有 3-5 个字符的时区缩写。
R> times_no_tz <- gsub(" [[:upper:]]{3,5} ", " ", times)
R> as.POSIXct(times_no_tz, format="%a %b %d %H:%M:%S %Y")
[1] "2015-07-03 00:15:00 UTC" "2015-07-03 00:15:00 UTC"

关于r - 如何为 R 中的 3 个字母 tz 指定 POSIX(时间)格式,以便忽略它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31821019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com