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

时间:2015-08-04 23:25:50

标签: r timezone posix strptime

对于输出,规范为<ItemsControl.ItemContainerStyle> <Style TargetType="ContentPresenter"> <Setter Property="HorizontalAlignment" Value="Stretch"/> </Style> </ItemsControl.ItemContainerStyle> (请参阅%Z)。但是对于输入,这是如何工作的?

为了澄清一下,将时区缩写解析为?strptime的有用信息会很棒,但更多的核心问题是如何让函数至少忽略时区。 / p>

这是我最好的解决方法,但是有一个特定的格式代码可以传递给适用于所有时区的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

1 个答案:

答案 0 :(得分:4)

简短的回答是,&#34;不,你不能。&#34;这些是缩写,并不保证唯一标识特定时区。

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

我刚注意到你并没有尝试解析时区缩写,你只是想避免它。我不知道告诉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"