2009-09-08 3 views
3

POSIX 날짜에서 1 일을 뺀 후 DST를 통해 동시에 끝납니다.DST 주변에 POSIXct 시간이 있습니까?

예를 들어

, 나는 하루에 추가 할 때 :

> as.POSIXct('2009-03-08 23:00:00.000') + 86400 
[1] "2009-03-09 23:00:00 EDT" 

을하지만 과거를 갈 때, 그것은 상쇄 :

> as.POSIXct('2009-03-08 23:00:00.000') - 86400 
[1] "2009-03-07 22:00:00 EST" 

DST 주위 절대 시간의 차이를 다루는 가장 좋은 방법은 무엇입니까? 대개 DST가 적용되지 않도록 시간을 문자열로 변환하고 별도로 처리하여이 문제를 처리합니다.

답변

2

, 당신 때문에 하루를 더하거나 뺄 것을 요구하지 않았 으면 24 시간을 더하거나 뺍니다.. 2009-03-08 23:00:00 EDT전의 24 시간 (86400 초)은2009-03-07 22:00:00 EST입니다. 필자는 R 라이브러리에 익숙하지 않지만 랩핑하는 POSIX 함수에 익숙하다. POSIXct을 사용하는 경우 day 속성을 1 줄인 다음 POSIXlt을 통해 POSIXct (예 : 2 월 -1 일이 1 월 31 일이되도록)을 "다시 캐스팅"하면 1 일을 안정적으로 빼는 것이 좋습니다.

1

datetimes를 UTC로 저장 -이 경우 UTC로 변환하여 하루를 빼고 현지 시간으로 다시 변환합니다. 그냥 일을 계산하려면, 당신은 단지 하루를 이동 trunc을 사용할 수 있습니다

+0

DTC가 변환에 계속 적용되므로 UTC로 변환하고 하루를 빼고 다시 변환하면 같은 오프셋으로 끝납니다. 권리? – Shane

+0

DST 첫날에 정확한 날짜가 정해지면 그렇지 않습니다. 하지만 모든 날짜 시간을 UTC로 생각하고 마지막 순간에 현지 시간으로 만 형식을 지정하십시오. – Mark

0

(이것은 윤초를 무시) : 귀하의 코드는 당신이 그것을 요구 정확하게하고있다

> trunc(Sys.time(), "day") + 86400 
[1] "2009-09-13 PDT" 
> trunc(Sys.time(), "day") - 86400 
[1] "2009-09-11 PDT" 
1

감사합니다. hobbs! 나는 그것으로 조금 더 일을해야하지만 하루 슬롯에서 뺀 것은 POSIXlt 작동합니다

> a <- as.POSIXct('2009-03-08 23:00:00.000') 
> as.POSIXlt(a) 
[1] "2009-03-08 23:00:00 EDT" 
> a <- as.POSIXlt(a) 
> a$mday <- a$mday -1 
> a 
[1] "2009-03-07 23:00:00 EDT" 
0

패키지 lubridate는 기본 패키지에 다소 불분명 지정할 두 개의 추가 시간 범위의 클래스를 제공합니다. 그쪽으로 수동에서 :

재생 시간

지속 시간이 순간 사이에 발생하는 시간의 정확한 양을 측정합니다. 윤년, 윤년 또는 일광 절약 시간제 (DST) 변경이 해당 간격에서 발생하면 시계 시간과 관련하여 예기치 않은 결과가 발생할 수 있습니다.

기간

기간 개의 순간 사이에 발생하는 시계의 시간 변화를 측정한다. 마침표는 윤초, 윤년 및 DST의 변경이있는 경우 시계 시간에 대한 강력한 예측을 제공합니다.

관련 문제