为什么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
但是,我想了解为什么会自动选择不同的时区!!
答案 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 Time,strptime
正在为适当的日期选择适当的时区。
最简单的解决方法是不使用format
(它会转换回字符串),而是使用R&#39的Date类,这是专门构建的:
as.Date(c("10/24/05", "3/1/04"),"%m/%d/%y")
# [1] "2005-10-24" "2004-03-01"