strptime为同一格式提供不同的时区?

时间:2016-06-24 21:10:57

标签: r strptime

为什么strptime在这里给出不同的时区:

strptime(c("10/24/05", "3/1/04"),"%m/%d/%y")

以下是我得到的输出:

> strptime(c("10/24/05", "3/1/04"),"%m/%d/%y")
[1] "2005-10-24 PDT" "2004-03-01 PST"

我可以format但是,我想了解为什么会自动选择不同的时区!!

1 个答案:

答案 0 :(得分:1)

strptime转换为POSIXlt,这是一个日期时间类,这就是您首先获得时区的原因。如果您没有指定tz参数,它将使用您当前位置的时区来解析您提供的任何位。由于您没有时间给它提供日期,它实际上也会为时间插入零,即您获得的结果实际上是在当时的时区设置为午夜,尽管它的打印方法没有显示该位。但他们在那里:

format(strptime(c("10/24/05", "3/1/04"),"%m/%d/%y"), format = '%F %T %Z')
# [1] "2005-10-24 00:00:00 EDT" "2004-03-01 00:00:00 EST"

由于您的时区实际上从太平洋标准时间更改为Pacific Daylight Timestrptime正在为适当的日期选择适当的时区。

最简单的解决方法是不使用format(它会转换回字符串),而是使用R&#39的Date类,这是专门构建的:

as.Date(c("10/24/05", "3/1/04"),"%m/%d/%y")
# [1] "2005-10-24" "2004-03-01"