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

strptime giving different timezone for same format?

为什么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 但是,我想了解为什么会自动选择不同的时区!!

strptime 转换为 POSIXlt,日期时间 class,这就是您首先获得时区的原因。如果您没有指定 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 的日期 class,这是专门构建的:

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