POSIX date from dates in weekly 时间格式
POSIX date from dates in weekly time format
我将日期编码为每周时间格式(欧洲公约 >> 01
到 52
/53
,例如 "2016-48"
)并希望将它们标准化POSIX 日期:
require(magrittr)
(x <- as.POSIXct("2016-12-01") %>% format("%Y-%V"))
# [1] "2016-48"
as.POSIXct(x, format = "%Y-%V")
# [1] "2016-01-11 CET"
我希望最后的陈述再次 return "2016-12-01"
。我在这里错过了什么?
编辑
多亏了德克,我才能够拼凑起来:
y <- sprintf("%s-1", x)
虽然我仍然不明白为什么这不起作用
(as.POSIXct(y, format = "%Y-%V-%u"))
# [1] "2016-01-11 CET"
这样做
(as.POSIXct(y, format = "%Y-%U-%u")
# [1] "2016-11-28 CET"
编辑 2
天啊,我认为使用 %V
是一个 非常 的坏主意:
as.POSIXct("2016-01-01") %>% format("%Y-%V")
# [1] "2016-53"
这是否应该被视为处于需要采取进一步行动的 "serious bug" 水平?!
坚持 %U
或 %W
似乎是正确的方法
as.POSIXct("2016-01-01") %>% format("%Y-%U")
# [1] "2016-00"
编辑 3
不,不完全 finished/still 困惑:该方法在第一周就不起作用
(x <- as.POSIXct("2016-01-01") %>% format("%Y-%W"))
# [1] "2016-00"
as.POSIXct(sprintf("%s-1", x), format = "%Y-%W-%u")
# [1] NA
当使用 %U
或 %W
时,它会持续 01
周01
(所以 "week 2",实际上)
as.POSIXct("2016-01-1", format = "%Y-%W-%u")
# [1] "2016-01-04 CET"
由于我必须处理很多 ISO 周的报告,我在几年前创建了 ISOweek
package。
该软件包包含函数 ISOweek2date()
,其中 returns 给定星期日期(根据 ISO 8601 的年份、一年中的星期、星期几)的日期。它是 date2ISOweek()
.
的反函数
使用 ISOweek
,您的示例变为:
library(ISOweek)
# define dates to convert
dates <- as.Date(c("2016-12-01", "2016-01-01"))
# convert to full ISO 8601 week-based date yyyy-Www-d
(week_dates <- date2ISOweek(dates))
[1] "2016-W48-4" "2015-W53-5"
# convert back to class Date
ISOweek2date(week_dates)
[1] "2016-12-01" "2016-01-01"
请注意,date2ISOweek()
需要格式为 yyyy-Www-d
的完整 ISO week-based date,包括星期几(1 到 7,周一到周日)。
因此,如果您只有年份和 ISO 周数,则必须创建一个指定星期几的字符串。
许多报告中的典型短语是,例如,“报告第 31 周结束 2017-08-06”:h
yr <- 2017
wk <- 31
ISOweek2date(sprintf("%4i-W%02i-%1i", yr, wk, 7))
[1] "2017-08-06"
附录
请参阅 了解另一个用例和有关 ISOweek
包的更多背景信息。
我将日期编码为每周时间格式(欧洲公约 >> 01
到 52
/53
,例如 "2016-48"
)并希望将它们标准化POSIX 日期:
require(magrittr)
(x <- as.POSIXct("2016-12-01") %>% format("%Y-%V"))
# [1] "2016-48"
as.POSIXct(x, format = "%Y-%V")
# [1] "2016-01-11 CET"
我希望最后的陈述再次 return "2016-12-01"
。我在这里错过了什么?
编辑
多亏了德克,我才能够拼凑起来:
y <- sprintf("%s-1", x)
虽然我仍然不明白为什么这不起作用
(as.POSIXct(y, format = "%Y-%V-%u"))
# [1] "2016-01-11 CET"
这样做
(as.POSIXct(y, format = "%Y-%U-%u")
# [1] "2016-11-28 CET"
编辑 2
天啊,我认为使用 %V
是一个 非常 的坏主意:
as.POSIXct("2016-01-01") %>% format("%Y-%V")
# [1] "2016-53"
这是否应该被视为处于需要采取进一步行动的 "serious bug" 水平?!
坚持 %U
或 %W
似乎是正确的方法
as.POSIXct("2016-01-01") %>% format("%Y-%U")
# [1] "2016-00"
编辑 3
不,不完全 finished/still 困惑:该方法在第一周就不起作用
(x <- as.POSIXct("2016-01-01") %>% format("%Y-%W"))
# [1] "2016-00"
as.POSIXct(sprintf("%s-1", x), format = "%Y-%W-%u")
# [1] NA
当使用 %U
或 %W
时,它会持续 01
周01
(所以 "week 2",实际上)
as.POSIXct("2016-01-1", format = "%Y-%W-%u")
# [1] "2016-01-04 CET"
由于我必须处理很多 ISO 周的报告,我在几年前创建了 ISOweek
package。
该软件包包含函数 ISOweek2date()
,其中 returns 给定星期日期(根据 ISO 8601 的年份、一年中的星期、星期几)的日期。它是 date2ISOweek()
.
使用 ISOweek
,您的示例变为:
library(ISOweek)
# define dates to convert
dates <- as.Date(c("2016-12-01", "2016-01-01"))
# convert to full ISO 8601 week-based date yyyy-Www-d
(week_dates <- date2ISOweek(dates))
[1] "2016-W48-4" "2015-W53-5"
# convert back to class Date
ISOweek2date(week_dates)
[1] "2016-12-01" "2016-01-01"
请注意,date2ISOweek()
需要格式为 yyyy-Www-d
的完整 ISO week-based date,包括星期几(1 到 7,周一到周日)。
因此,如果您只有年份和 ISO 周数,则必须创建一个指定星期几的字符串。
许多报告中的典型短语是,例如,“报告第 31 周结束 2017-08-06”:h
yr <- 2017
wk <- 31
ISOweek2date(sprintf("%4i-W%02i-%1i", yr, wk, 7))
[1] "2017-08-06"
附录
请参阅 ISOweek
包的更多背景信息。