在 R 中,as.POSIXlt 和 strptime 需要不同的格式吗?
In R, do as.POSIXlt and strptime require different formats?
考虑以下 R 控制台输出。
> Sys.getlocale()
[1] "LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=en_US.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=C"
> dh <- '2018-05-08 07:42:34 PM'
> as.POSIXlt(dh,'%Y-%m-%d %I:%M:%S %p')
[1] "2018-05-08 07:42:34"
> strptime(dh,'%Y-%m-%d %I:%M:%S %p')
[1] "2018-05-08 19:42:34 -03"
如果两种格式相同,为什么 as.POSIXlt
无法正确识别 12 小时格式? dh
给出了晚上(晚上 7 点)的时间,但函数返回的是早上的时间! as.POSIXct
给出同样的错误。
我在这里错过了什么?
实际错误似乎在行中;
as.POSIXlt(dh, '%Y-%m-%d %I:%M:%S %p')
应该是:
as.POSIXlt(dh, format= '%Y-%m-%d %I:%M:%S %p')
#[1] "2018-05-08 19:42:34 BST"
strptime
的第二个参数是 format
。因此,strptime(dh,'%Y-%m-%d %I:%M:%S %p')
工作正常,因为它将第二个参数视为 format
。
但是 as.POSIXlt
的第二个参数是 tz
。因此,提供的被视为 format
的文本被视为 tz
并使用默认值 format
。这导致了意想不到的价值。
考虑以下 R 控制台输出。
> Sys.getlocale()
[1] "LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=en_US.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=C"
> dh <- '2018-05-08 07:42:34 PM'
> as.POSIXlt(dh,'%Y-%m-%d %I:%M:%S %p')
[1] "2018-05-08 07:42:34"
> strptime(dh,'%Y-%m-%d %I:%M:%S %p')
[1] "2018-05-08 19:42:34 -03"
如果两种格式相同,为什么 as.POSIXlt
无法正确识别 12 小时格式? dh
给出了晚上(晚上 7 点)的时间,但函数返回的是早上的时间! as.POSIXct
给出同样的错误。
我在这里错过了什么?
实际错误似乎在行中;
as.POSIXlt(dh, '%Y-%m-%d %I:%M:%S %p')
应该是:
as.POSIXlt(dh, format= '%Y-%m-%d %I:%M:%S %p')
#[1] "2018-05-08 19:42:34 BST"
strptime
的第二个参数是 format
。因此,strptime(dh,'%Y-%m-%d %I:%M:%S %p')
工作正常,因为它将第二个参数视为 format
。
但是 as.POSIXlt
的第二个参数是 tz
。因此,提供的被视为 format
的文本被视为 tz
并使用默认值 format
。这导致了意想不到的价值。