2013-08-23 2 views

답변

6

자정에서 '기준 시간'을 구축, 한 번 초로 변환 주어진 밀리 초 을 추가하고 시간으로 해석 :

사실
R> as.POSIXct(as.numeric(ISOdatetime(2013,8,22,0,0,0)) + 34200577/1e3, 
+    origin="1970-01-01") 
[1] "2013-08-22 09:30:00.576 CDT" 
R> 

, 짧은

R> ISOdatetime(2013,8,22,0,0,0) + 34200577/1e3 
[1] "2013-08-22 09:30:00.576 CDT" 
R> 

이 작동하고 ISOdatetime()은 소수 시간이 인 적절한 시간 객체 을 반환하므로 주어진 오프셋을 적용하기 만하면됩니다.

이 창문에 ...

R> 34200577/1e3  # seconds 
[1] 34200.6 
R> 34200577/1e3/60 # minutes 
[1] 570.01 
R> 34200577/1e3/60/60 # hours 
[1] 9.50016 
R> 
+0

Dirk에게 고마워, 그건 그냥 속임수 야. – Craig

+0

기쁨. 사이트 공통으로 받아 들일 수 있으며/또는 upvote하십시오. –

2

POSIXct는 시간 스케일의 원점 1970을 사용 (초 단위).

> time= as.POSIXct(34200577/1000 , origin=Sys.Date()) 
> time 
[1] "2013-08-22 02:30:00 PDT" 

참고 더크의 내 방법과 결과의 불일치. POSIX 시간은 UCT에서 발생하는 것으로 가정하므로 UCT-8에서 내 위치에 대한 추가 8 시간이 나타납니다.

> difftime(as.POSIXct(34200577/1000 , origin=Sys.Date()) , Sys.Date()) 
Time difference of 9.50016 hours 

당신은 자정 이후의 시간을 얻을 수 :

format(as.POSIXct(34200577/1000 , origin=Sys.Date(), tz="UCT"), 
      format="%H:%M:%S") 
[1] "09:30:00" 
+0

David, OP는 자정 이후 _ 밀리 세컨드라고 말합니다. 따라서 10^-3 배율 인자가 누락되었습니다. –

+0

Ooops. 고칠 수있어. –

+0

답변 사이에는 7 시간의 차이가 있습니다. 오직 하나만 옳을 수 있습니다. 나는 당신이 어딘가에'TZ' 변환을 놓쳤다는 것을 두려워합니다. –

2

내가 지적 가치가 생각하는 "gottcha"A 적게 R 3.1.2에서

올바른 것으로 보인다 64 비트 나는 다음과 같은 결과를 얻을 수 더크의 예를 들어

> ISOdatetime(2013,8,22,0,0,0) + 34200577/1e3 
[1] "2013-08-22 09:30:00 BST" 

소수 초가 부족합니다. 당신이 아마 추측 수 있듯이

> options(digits.secs=3) 
> ISOdatetime(2013,8,22,0,0,0) + 34200577/1e3 
[1] "2013-08-22 09:30:00.576 BST" 

이이 서식하는 것입니다 : 이것은 다음과 예상되는 결과를 제공으로이 옵션을 설정 "digits.secs"

> getOption("digits.secs") 
NULL 

에 대한 옵션 설정으로 인해 의 출력이 아니라 실제 날짜 값 산술 값입니다. 자세한 내용은 ?strptime?options을 참조하십시오.

관련 문제