2013-05-29 2 views
2

어떤 이유로 든 as.POSIXct"2013-03-10 02:00:00.000"을 다른 형식의 유효한 datetimes와 다릅니다.이상한 POSIXct 오류

> as.POSIXct("2013-03-10 01:00:00.000") #Different time, same date 
[1] "2013-03-10 01:00:00 PST" 

> as.POSIXct("2013-03-11 02:00:00.000") #Same time, different date 
[1] "2013-03-11 02:00:00 PDT" 

> as.POSIXct("2013-03-10 02:00:00.000") 
[1] "2013-03-10 PST" 

나는 데이터베이스에서이 읽을 수있는 패키지 RODBC을 사용하고, 그것은 자동으로 POSIXct 클래스로 날짜 시간이 전체 열을 변환합니다. 이로 인해 전체 열이 시간 정보를 잃게됩니다.

+1

일광 절약 시간제 변경 ??? 2013-03-10의 오전 2 시가 해당 시간대에 존재하지 않습니까? –

+1

@BenBolker가 맞습니다. 그날 오전 2 시가 존재하지 않았습니다. –

+0

물론 PST에서 PDT 로의 전환을 설명합니다. 'RODBC' 패키지의 코드를 수정하거나 데이터베이스의 값을 변경하지 않고도이 문제를 해결할 수있는 쉬운 방법은 없을 것이라고 생각합니다. –

답변

2

이것은 일광 절약 시간 문제입니다. 분명히 2013-03-10의 오전 2 시가 해당 시간대에 존재하지 않습니다. 그럼에도 불구하고 적어도 as.POSIXct은 불평하지 않지만 약간 이상한 대답을 조용히 되 돌리는 것은 다소 재미있다. 당신이 얻을 수 있다고 지적 @JoshUlrich : R은 일반적으로이 물건의 일부 시스템 라이브러리를 사용하고, 그래서 기본 라이브러리의 변덕에 있다는 하나의 문제는

는 의견에서 유용한 정보를 통합 ... 할 수있다 RODBC은 시스템 수준의 시간대를 사용하여 지정하기보다는 데이터를 가져 오기 전에 Sys.setenv(TZ="GMT")을 사용하여 원본 데이터가 실제로 GMT 인 경우에만 제공됩니다.

+0

...하지만 Win32 (R-2.15.2) 및 Ubuntu 64 (R-3.0.1)에서 동일한 동작이 발생합니다. 나는 이것이 'NA'를 반환하는 데 사용되었다고 맹세한다. –

+0

일광 절약 시간이 문제 였고,'Sys.setenv (TZ = "GMT")'는 쉬운 해결 방법이었습니다. –