2015-10-13 4 views
2
?timezones

"Most platforms support time zones of the form GMT+n and GMT-n, which assume at a fixed offset from UTC (hence no DST)." состоянияR больше не принимает часовых поясов в формате GMT ​​+ п/GMT-н

У меня есть старый код от ранее в этом году, где я использую tz="GMT-8". Изменения только на моем компьютере обновлялись до версии R "R version 3.2.2 (2015-08-14)" и мигрировали мою библиотеку из старой учетной записи пользователя, добавив строку кода в мой Rprofile, расположенный в "C:\Program Files\R\R-3.2.2\library\base\R". Для детального кода был .libPaths(c("C:/Users/XXXX XXXX/Documents/R/win-library/3.2",.Library.site)). Почему моя система не может принять этот формат tz? Какую системную настройку я могу изменить, чтобы решить эту проблему?

Рабочий пример ниже.

tdat<-c("11/19/2014 12:45", "11/19/2014 13:00", "11/19/2014 13:15", 
"11/19/2014 13:30", "11/19/2014 13:45", "11/19/2014 14:00", "11/19/2014 14:15", 
"11/19/2014 14:30", "11/19/2014 14:45", "11/19/2014 15:00") 

as.POSIXct(strptime(tdat,"%m/%d/%Y %H:%M",tz="GMT-8")) 

Warning messages: 
1: In strptime(tdat, "%m/%d/%Y %H:%M", tz = "GMT-8") : 
    unknown timezone 'GMT-8' 
2: In as.POSIXct.POSIXlt(strptime(tdat, "%m/%d/%Y %H:%M", tz = "GMT-8")) : 
    unknown timezone 'GMT-8' 
3: In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'GMT-8' 
+0

Предлагаем удалить тег «R» в соответствии с примечанием в 'timezones':« Обратите внимание, что, кроме тех случаев, когда они заменены, работа часовых поясов является службой ОС и даже там, где используется база данных сторонних разработчиков, и может быть обновлена (см. раздел «Названия часовых поясов»). Неправильные результаты никогда не будут проблемой R, поэтому, пожалуйста, убедитесь, что у вас есть любезность, чтобы не обвинять R в них ». –

+0

ИМХО тег R здесь в порядке, так как не писать вопрос в обвинительном тоне или жаловаться на r-devel, вероятно, достаточно придерживаться духа просьбы «избегать обвинения R». – joran

+2

Попробуйте 'tz =" Etc/GMT-8 "' –

ответ

5

Если ваша платформа используют стандартные tzdb часовые пояса, то вы действительно можете задать фиксированные все-часовые зоны в виде: Etc/GMT+8.

Однако следует помнить:

  • Знак переворачивается от того, что вы, вероятно, ожидать. Etc/GMT-8 находится в Китае. Etc/GMT+8 есть в Америке.

  • Существует множество зон реального мира, которые используют полчаса или 45-минутные смещения, которые не могут быть представлены в этой форме.

  • Это не относится к летнему летнему времени или другим историческим изменениям в часовых поясах.

Поэтому лучше идея заключается в том, чтобы использовать имени часовых поясов, как найдено here.

Например, для US Pacific Time используйте America/Los_Angeles, так как оно правильно учитывает переход на летнее время, чередуя UTC-8 и UTC-7.

+0

О, хорошо. Спасибо, я заметил какое-то странное поведение, которое было объяснено перевернутым знаком. Я просто манипулирую данными временного ряда и нуждаюсь в нем в PST, поэтому это решение работает. Прочтите свои ссылки и сможете найти информацию, которая объясняет использование 'Etc/GMT-n'. Так что это имеет больше смысла. Еще раз спасибо. Приветствия. – CCurtis

+0

Несомненно. Просто помните, PST - это только тихоокеанское стандартное время. Если вам нужно, чтобы он соответствовал тому, что на самом деле используется в Pacific Time, вам также необходимо рассмотреть Pacific Daylight Time (PDT). UTC-8 не используется в течение лета. –