Возможно, рано утром 01.10.2017 я обнаружил любопытный пробел в течении времени. У меня есть хорошо зарекомендовавший себя код, который я часто использую для создания 30-минутных интервалов для суммирования и построения графиков наблюдений. Интервалы начинаются на закате и заканчиваются на рассвете, поэтому дата меняется в полночь. Почти для любой пары дат («ночи»), которую я хочу ввести, мой код работает нормально. Но для ночи 2017-09-30 он пропускает два интервала 02:00 и 02:30. Код ниже.
missing.times <- data.frame(isotime2=seq(as.POSIXct("2017-09-30 17:30:00", format="%Y-%m-%d %H:%M:%S"), as.POSIXct("2017-10-01 06:30:00", format="%Y-%m-%d %H:%M:%S"), by="30 min")); missing.times #missing 0200 and 0230
all.okay <- data.frame(isotime2=seq(as.POSIXct("2017-10-01 17:30:00", format="%Y-%m-%d %H:%M:%S"), as.POSIXct("2017-10-02 06:30:00", format="%Y-%m-%d %H:%M:%S"), by="30 min")); all.okay
Я попробовал хитрый обходной путь, но в конечном итоге я все равно создаю пробел.
#create intervals for the next date from midnight to 06:30
workaround <- data.frame(isotime2=seq(as.POSIXct("2017-10-02 00:00:00"), as.POSIXct("2017-10-02 06:30:00"), by="30 min")); workaround; str(workaround)
#substitute the following date for the time-gap date 2017-10-01
workaround$isotime2 <-gsub("2017-10-02", "2017-10-01", workaround$isotime2); workaround; str(workaround)
#change the vector "isotime2" from character to POSIXct magically makes time disappear
workaround$isotime2 <-as.POSIXct(workaround$isotime2, format="%Y-%m-%d %H:%M:%S"); workaround; str(workaround)
Я каким-то образом создал этот временной разрыв, или R что-то знает о складке пространства-времени? Я спал, когда это случилось.
tz="Australia/Perth"
, это не исправит. - person ptenax   schedule 19.12.2017sessionInfo()
. Это может повлиять на интерпретацию часовых поясов. Где именно вы поставилиtz=
и каков был результат, который вы получили, по сравнению с тем, что вы ожидали? - person MrFlick   schedule 19.12.2017Sys.time()
дает мне2017-12-20 01:49:36 ACDT
, где ACDT — это центральное летнее время Австралии (с переходом на летнее время). В Перте нет перехода на летнее время, поэтому там должно быть время. - person ptenax   schedule 19.12.2017tz
вот так:missing.times <- data.frame(isotime2=seq(as.POSIXct("2017-09-30 17:30:00", format="%Y-%m-%d %H:%M:%S"), as.POSIXct("2017-10-01 06:30:00", format="%Y-%m-%d %H:%M:%S", tz="Australia/Perth"), by="30 min")); missing.times #missing 0200 and 0230
- person ptenax   schedule 19.12.2017test <- as.POSIXct("2017-10-01 02:30:00", format="%Y-%m-%d %H:%M:%S", tz="Australia/Perth")
работает,test <- as.POSIXct("2017-10-01 02:30:00", format="%Y-%m-%d %H:%M:%S", tz="Australia/ACT")
не работает (тест будет равенNA
во втором случае). - person Nova   schedule 19.12.2017tz="Australia/Perth"
должно работать, если его вставить в исходный код. - person ptenax   schedule 19.12.2017