r - R - 日期序列具有不同的长度,具体取决于使用的格式
问题描述
在此先感谢您的时间。
我在 R 中生成从一个日期到另一个日期的每小时时间序列。这些是两个日期:
first_date_year_start <- as.Date("1995-1-1")
date_end <- as.Date("2015-10-31")
然后我使用两种不同的方法来生成序列。第一个是将日期转换为数字并使用 1/24(1 小时)的步长:
julDays_1hstep_simulation_period <- seq(from = 1, to = 23/24 + as.numeric(date_end-first_date_year_start) + 1, by = 1/24 )
这个向量的长度是 182616。
第二种方法是将日期的格式更改为与时间一致,然后生成序列:
first_date_year_start_with_time <- strptime (paste0(as.character(first_date_year_start), " 00:00") ,format = "%Y-%m-%d %H:%M")
date_end_with_time <- strptime (paste0(as.character(date_end), " 23:00") ,format = "%Y-%m-%d %H:%M")
dates_with_times_simulation_period <- seq(from =first_date_year_start_with_time , to = date_end_with_time , by = "hour")
这个向量的长度是 182615。
为什么这些向量的长度相差 1?就好像在某个地方多出了一个小时。
奇怪的是,如果我选择一个更接近开始日期的结束日期,例如:
date_end <- as.Date("2015-1-3")
那么这两个向量的长度相同(175392)
有谁知道这种奇怪行为的原因?
再次感谢!
解决方案
您的第一种方法假定它始终是一天 24 小时,但情况并非总是如此。例如,在美国,由于夏令时。
让我们在 3 月 8 日 2015 年美国夏令时的前一天和后一天(如果您的语言环境设置为美国)尝试使用两个日期的方法。
start <- as.Date("1995-1-1")
end_bef <- as.Date("2015-3-7")
end_aft <- as.Date("2015-3-9")
两种方法:
# Assumes 24 hours each day
method_1 <- function(start, end) {
out <- seq(
from = 1,
to = 23/24 + as.numeric(end - start) + 1,
by = 1/24
)
length(out)
}
# Lets `seq()` date method worry about daylight savings time, etc,
# based on locale
method_2 <- function(start, end) {
start <- strptime(
paste0(as.character(start), " 00:00"),
format = "%Y-%m-%d %H:%M"
)
end <- strptime(
paste0(as.character(end), " 23:00"),
format = "%Y-%m-%d %H:%M"
)
length(seq(start, end, "hour"))
}
让我们试一试:
method_1(start, end_bef) == method_2(start, end_bef)
#> [1] TRUE
method_1(start, end_aft) == method_2(start, end_aft)
#> [1] FALSE
编辑
你原来的第二种方法是正确的,在我的第一个版本中,我在最后一天数了 25 小时。现已更正。
推荐阅读
- extjs - 当我将记录添加到它喜欢的 Ext.data.Store 时,Ext.grid.Panel 不会更新
- neo4j - 在 Cypher 中查找连接节点组
- security - 詹金斯添加了指向仪表板的链接不起作用
- r - ggplot2中geom_text中的部分斜体标签
- ios - 如何将方法订阅到包含此方法的类之外的按钮触摸?
- java - 使用 java 和 iText 签署 PDF 哈希
- algorithm - 了解 RANSAC 优化
- dart - 如何在 Bloc 模式中使用 SharedPreferences?
- angular - 如何使用 *ngIf 指令更改图像?
- python - Darkflow:为什么我得到有损/不完整的输出图像(我用自己的数据训练)