Как найти настройку летнего времени для заданной даты и часового пояса в R? - PullRequest
0 голосов
/ 16 января 2012

В PHP (начиная с 5.2.0) я могу написать этот код:

//$t is timestamp of day I want to look at
$tz=new DateTimeZone('America/New_York');
$transition = $tz->getTransitions($t,$t);
if(!$transition || count($transition)==0)throw new Exception("Bad timezone")
$offset=$transition[0]['offset'];   //This is seconds ahead of GMT.
      //I.e. -14400 in summer, -18000 in winter.

Я чуть не плакал от радости, когда обнаружил этот класс / идиому; но есть ли способ сделать то же самое в R? Или я должен прибегнуть к тому, что я делал в PHP, который был жестким кодом массива дат начала / окончания летнего времени для каждого часового пояса, который я должен учитывать?

(Кстати, подробнее о коде PHP см. Как узнать, наблюдает ли часовой пояс летнее время в любое время года? )

Ответы [ 2 ]

3 голосов
/ 16 января 2012

С помощью as.POSIXct и as.POSIXlt вы можете получить эту информацию.Например:

tz = 'Europe/Madrid'
d1 <- as.POSIXct('2010-01-01 12:00:00',  tz = tz)
as.POSIXlt(d1)$isdst ## 0 since it's not DST

Если вам нужно отличие от UTC:

d0 <- as.POSIXct(format(d1,  tz = 'UTC'),  tz = tz)
as.numeric(d1 - d0) ## 1 hour

То же самое для другого дня:

d2 <- as.POSIXct('2010-07-01 12:00:00',  tz = tz)
as.POSIXlt(d2)$isdst ## 1 since it is DST
d0 <- as.POSIXct(format1(d2,  tz = 'UTC'),  tz = tz)
as.numeric(d2 - d0) ## 2 hour
3 голосов
/ 16 января 2012

Вы можете построить два временных объекта для одной и той же даты и времени, один в желаемом часовом поясе, другой в GMT, и посмотреть на их разницу.

# Winter: London uses GMT
> ISOdatetime(2012, 01, 01, 00, 00, 00, "Europe/London") - 
  ISOdatetime(2012, 01, 01, 00, 00, 00, "GMT")
Time difference of 0 secs

# Summer: London uses GMT+1
> ISOdatetime(2012, 08, 01, 00, 00, 00, "Europe/London") - 
  ISOdatetime(2012, 08, 01, 00, 00, 00, "GMT")
Time difference of -1 hours
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...