2016-04-07 5 views
2

Я определил дату с часовым поясом, но когда я распечатаю ее, используя пакет scalesdate_format, он дает мне время в UTC, что неудобно для моей цели.date_format timezone strangeness

> library(scales) 
> st <- as.POSIXct("2015-10-31 00:00:00",tz="US/Pacific") 
> st 
[1] "2015-10-31 PDT" 
> fmt <- date_format("%Y-%m-%d %R %Z") 
> fmt(st) 
[1] "2015-10-31 07:00 UTC" 

Интересно это работает (так POSIXct, кажется, понимает часовой пояс) - но не дает мне достаточно контроля над форматом:

> format(st,usetz=T) 
[1] "2015-10-31 PDT" 

Эта ненадежность намекают в помощь для ?date_format:

Когда% z или% Z используется для вывода с объектом с назначенным временем зоной, делается попытка использовать значения для этого часового пояса - b ut it не гарантируется.

Так что мой вопрос: как мне сделать Успешно?

Предлагаем обходные пути в порядке и может поддерживать upvotes, но, пожалуйста, поймите, что этот вопрос состоит в том, что я хочу получить представление о том, что происходит с date_format.

+0

Вы должны * избегать * трехбуквенных акронимов часового пояса, поскольку они * не * стандартизированы. PDT может означать разные вещи в разных локалях. * Странная вещь заключается в том, что 'st' возвращает' PDT' вместо, например, '.... 00:00:00 + 07: 00Z'. Локализация R не очень согласована - в этом случае 'st' использовал собственный формат, который. Если вы хотите отображать даты в * специальном * формате, определите его явно в строке формата. В этом случае, какой именно формат вы хотите вернуть? –

+0

Избегайте трехбуквенных часовых поясов? Я не использовал их, 'date_format' и' format'. Как показывает пример. –

+0

Какой формат вы хотите вернуть? –

ответ

3

Определение date_format очень коротко:

function (format = "%Y-%m-%d", tz = "UTC") 
{ 
    function(x) format(x, format, tz = tz) 
} 

Это должно быть понятно, почему часовой пояс меняется, если вы не измените значение по умолчанию.

+0

Хорошо, должен был найти это сам. Все еще запутано. Шкалы –

+0

в основном содержат удобные функции для построения (в частности, для использования в ggplot2). – Roland

+0

Не знаете, почему 'date_format' переопределяет часовой пояс. Кажется, это отрицает некоторые из его удобства. –