r - R中的夏令时 - 正确读取时间戳的问题
问题描述
我正在尝试从 csv 读取 15 分钟的数据。我一直在努力解决似乎被错误检测到的夏令时。这是我拥有的时间戳的一个小样本(我的 tz = 'Europe/Berlin')。请注意,在此示例中,由于夏令时的时间偏移是从 03:00 到 02:00。
library(lubridate)
library(dplyr)
dt <- c('29.10.2017 01:30 - 29.10.2017 01:45',
'29.10.2017 01:45 - 29.10.2017 02:00',
'29.10.2017 02:00 - 29.10.2017 02:15',
'29.10.2017 02:15 - 29.10.2017 02:30',
'29.10.2017 02:30 - 29.10.2017 02:45',
'29.10.2017 02:45 - 29.10.2017 03:00',## end of daylight savings
'29.10.2017 02:00 - 29.10.2017 02:15',
'29.10.2017 02:15 - 29.10.2017 02:30',
'29.10.2017 02:30 - 29.10.2017 02:45',
'29.10.2017 02:45 - 29.10.2017 03:00')
我的目标是将每个时段的开始时间保存为 POSIXct,但是由于夏令时导致的时间偏移没有正确标记,导致时间戳重复。
dt <- strsplit(dt, split = ' -') %>% unlist() %>% matrix(byrow = TRUE, ncol = 2)
dtstart <- as_datetime(dt[, 1], format = '%d.%m.%Y %H:%M', tz = "CET")
dtstart
# [1] "2017-10-29 01:30:00 CEST" "2017-10-29 01:45:00 CEST"
# [3] "2017-10-29 02:00:00 CEST" "2017-10-29 02:15:00 CEST"
# [5] "2017-10-29 02:30:00 CEST" "2017-10-29 02:45:00 CEST"
# [7] "2017-10-29 02:00:00 CEST" "2017-10-29 02:15:00 CEST"
# [9] "2017-10-29 02:30:00 CEST" "2017-10-29 02:45:00 CEST"
我的想法是使用期末,然后减去 15 分钟,但再次产生重复
dtend <- as_datetime(dt[, 2], format = '%d.%m.%Y %H:%M', tz = "CET")
dtend
# [1] "2017-10-29 01:45:00 CEST" "2017-10-29 02:00:00 CEST"
# [3] "2017-10-29 02:15:00 CEST" "2017-10-29 02:30:00 CEST"
# [5] "2017-10-29 02:45:00 CEST" "2017-10-29 03:00:00 CET" ## should be CEST ?
# [7] "2017-10-29 02:15:00 CET" "2017-10-29 02:30:00 CET"
# [9] "2017-10-29 02:45:00 CET" "2017-10-29 03:00:00 CET"
dtend[6]-dtend[10]
# Time difference of 0 secs
有解决方法还是我做错了什么?
解决方案
推荐阅读
- java - 如何修复线程“main”org.openqa.selenium.WebDriverException中的异常?
- python - 在 python 中使用 reduce() 序列化字符串
- python - Check a dict key using assert from unit test
- python - 多个while循环
- bash - Doing a "one vs others" iteration through Bash script arguments
- javascript - reactjs:如何立即显示更新状态?
- xamarin - 在 Appcenter 中运行 NUnit 测试?
- python-3.x - 如何删除“int”对象不可调用
- php - 使用 while 循环查找最大数字
- reactjs - 将 Chrome 扩展的业务逻辑放在哪里