Почему strftime R возвращает предыдущий месяц за полночь? - PullRequest
0 голосов
/ 11 февраля 2020

Это прямо на границе и является патологическим случаем, но это доставляет мне неприятности:

> strftime(as.POSIXct('2016-07-01', tz = 'UTC'), '%m')
[1] "06"

Кажется, должно быть 7, хотя я знаю, что уже полночь. Это 7:

> strftime(as.POSIXct('2016-07-02', tz = 'UTC'), '%m')
[1] "07"
> strftime(as.POSIXct('2016-07-01'), '%m')
[1] "07"

Что здесь происходит?

Ответы [ 2 ]

3 голосов
/ 11 февраля 2020

Добавление часового пояса к strftime:

strftime(as.POSIXct('2016-07-01', tz = 'UTC'), '%m', tz="UTC")
[1] "07"

Объяснение:

Вы указали часовой пояс только для as.POSIXct. Затем вы используете strftime без , указывающего часовой пояс, в результате чего strftime возвращается к значениям по умолчанию

С ?strftime:

tz Строка символов, указывающая часовой пояс, который будет использоваться для преобразования. Специфика системы c (см. As.POSIXlt)

Если часовой пояс вашей системы не UTC, это может вызвать это несоответствие.

1 голос
/ 11 февраля 2020

Функция strftime по умолчанию соответствует вашему часовому поясу, поэтому полночь UT C все еще является предыдущим днем ​​для всех точек на западе.

Либо добавьте параметр "tz =" к функции strftime:

 strftime(as.POSIXct('2016-07-01', tz = 'UTC'), '%m', tz="UTC")
[1] "07"  

, либо используйте функцию format:

format(as.POSIXct('2016-07-01', tz = 'UTC'), '%m')
[1] "07"
...