2017-03-29 1 views
0

왜 R이 올바른 시간대를 얻지 못하는지 궁금합니다. 내가 놓친 게 있니?시간대가 문자에서 올바르게 설정되지 않는 이유

my_str <- c("2016-01-01 00:04:52 CET", "2016-01-01 00:09:52 CET", 
      "2016-01-01 00:18:04 CET", "2016-01-01 00:18:49 CET") 
my_t <- as.POSIXct(my_str) 
attributes(my_t) 
# $class 
# [1] "POSIXct" "POSIXt" 
# 
# $tzone 
# [1] "" 

my_t <- lubridate::ymd_hms(my_str) 
attributes(my_t) 
# $tzone 
# [1] "UTC" 
# 
# $class 
# [1] "POSIXct" "POSIXt" 

이 문제를 "해결"하지만 명백한에 대해 조심해야하는 이유 궁금 :

my_t <- as.POSIXct(my_str, tz="CET") 
attributes(my_t) 
# $class 
# [1] "POSIXct" "POSIXt" 
# 
# $tzone 
# [1] "CET" 
+0

연구'도움을 ("strptime")'. 표준 시간대는 문자열에서 파싱 할 수 없습니다 (아마도 대부분의 운영 체제에서 제공하지 않기 때문일 수 있습니다). – Roland

+0

@Roland Ok, 상당히 함정이 있으며 문서는 다음과 같이 말합니다. "... 표준은 오프셋을 알 수 없으면 빈 문자열을 출력해야하지만 일부 시스템에서는 현재 사용중인 표준 시간대에 대한 오프셋을 사용한다고 말합니다 년." – Christoph

+0

다시 R은이를 위해 OS 기능을 사용합니다. 불만 사항이 있으면 OS 공급 업체에 직접 문의하거나 아래에 표시된대로 대안을 사용하십시오 (패키지는 언제든지 C 라이브러리를 사용함). – Roland

답변

2

경이로운 anytime 패키지는 문제를 해결 :

my_str <- c("2016-01-01 00:04:52 CET", "2016-01-01 00:09:52 CET", 
      "2016-01-01 00:18:04 CET", "2016-01-01 00:18:49 CET") 
library(anytime) 

my_t <- anytime(my_str) 

attributes(my_t) 
#> $class 
#> [1] "POSIXct" "POSIXt" 
#> 
#> $tzone 
#> [1] "Europe/Berlin" 
관련 문제