【发布时间】:2013-05-16 13:49:14
【问题描述】:
我有一个值为“2012-04-15 16:49:36 CEST”的 POSIXct 变量。 format 函数以十进制数返回年、周和星期几,本例为 2012 15 0。对格式不太熟悉的人的说明:
- %Y:带世纪的年份。
- %W: 一年中的周数为十进制数 (00–53) 使用星期一作为一周的第一天(通常与 一年中的第一个星期一作为第 1 周的第 1 天)。英国公约。
- %w:工作日为十进制数(0-6,星期日为 0)。
然后,我尝试将这些值转换回 POSIXct 变量,但意外发生了。当我阅读这些值时,这些函数似乎解释了错误的日期(2012-04-08)。但是,当我使用 Sys.time() 对第二个示例执行相同的过程并且它按预期工作时,令人惊讶的是。有人可以解释一下为什么它在第一个示例中不起作用吗?
(TS <- structure(1334501376, class = c("POSIXct", "POSIXt")))
(TS_YWw <- format(TS,format="%Y %W %w"))
as.POSIXct(TS_YWw,format="%Y %W %w")
(TS <- Sys.time())
(TS_YWw <- format(TS,format="%Y %W %w"))
as.POSIXct(TS_YWw,format="%Y %W %w")
输出
> (TS <- structure(1334501376, class = c("POSIXct", "POSIXt")))
[1] "2012-04-15 16:49:36 CEST"
> (TS_YWw <- format(TS,format="%Y %W %w"))
[1] "2012 15 0"
> as.POSIXct(TS_YWw,format="%Y %W %w")
[1] "2012-04-08 CEST"
>
> (TS <- Sys.time())
[1] "2013-05-16 15:27:44 CEST"
> (TS_YWw <- format(TS,format="%Y %W %w"))
[1] "2013 19 4"
> as.POSIXct(TS_YWw,format="%Y %W %w")
[1] "2013-05-16 CEST"
顺便说一句,我在一台装有 R 2.15.3 的 Windows XP 32 位机器上运行了代码。谢谢大家!
【问题讨论】:
-
这更好地说明了问题:
format(as.POSIXct("2012-01-01 CEST"),format="%Y %W %w"); as.POSIXct("2012 1 0",format="%Y %W %w")。 2012-01-01 是一个星期天。 2006 年也存在同样的问题,它也是从星期日开始的。