【发布时间】:2017-11-13 14:58:44
【问题描述】:
我使用以下代码来查找中欧是否在使用由变量年、月和日给出的日期中的夏令时。
timeString = paste(toString(year), formatC(month, width = 2, flag="0"), formatC(day, width = 2, flag="0"), "12", sep = "-")
time = strptime(timeString, format = "%Y-%m-%d-%H")
diff = as.numeric(as.POSIXct(time, tz="UTC") - as.POSIXct(time, tz="Europe/Prague"))
在我的 PC (Ubuntu 16.04) 上,当夏令时处于活动状态时,diff 为 2,否则为 1,但在使用 Debian 8.8 的服务器上,在所有情况下它都是 1。你知道如何将服务器设置为 Ubuntu 吗?谢谢。
更新:Debian 时间设置的更改也会更改用于 crontab 的时间,这是不可取的。使用新配置重新安装 R 似乎有风险,因为每隔几分钟就会运行一些 R 脚本。所以我选择了 R 函数形式的“丑陋”解决方案:
DaylightSaving = function(year, month, day) {
# years 2010-2030
if (year < 2010 || year > 2030) {
stop("The function is implemented now only for years 2010-2030")
}
dayStart = c(28, 27, 25, 31, 30, 29, 27, 26, 25, 31, 29, 28, 27, 26,
31, 30, 29, 28, 26, 25, 31)
dayEnd = c(31, 30, 28, 27, 26, 25, 30, 29, 28, 27, 25, 31, 30, 29,
27, 26, 25, 31, 29, 28, 27)
if (month < 3 || month > 10) {
return(FALSE)
} else if (month == 3 && day < dayStart[year - 2009]) {
return(FALSE)
} else if (month == 10 && day >= dayEnd[year - 2009]) {
return(FALSE)
}
return(TRUE)
}
【问题讨论】:
-
您是否花时间检查两个系统是否具有相同的时区设置?