2017-07-02 12 views
2

Atlantic Daylight Time(GMT + 4)にdatetime列があり、次のコードを使用してUTCに変換したいが、正しいtzoneが見つからない作業するコード(ADTまたはGMT + 4は認識されません)。サークルで回っているので誰かが助けてくれますし、tzoneのヘルプページは解決策を提供していません。GMT + 4タイムゾーンをUTCに変換する方法

例データ:

> dput(df) 
structure(list(Date = c("05/04/17", "05/04/17", "05/04/17", "05/04/17", 
"05/04/17", "05/04/17", "05/04/17"), Time = c(" 12:10:26", " 12:11:01", 
" 12:11:38", " 12:12:13", " 12:12:48", " 12:13:24", " 12:13:58" 
)), .Names = c("Date", "Time"), class = "data.frame", row.names = c(NA, 
-7L)) 

> df 
     Date  Time 
1 05/04/17 12:10:26 
2 05/04/17 12:11:01 
3 05/04/17 12:11:38 
4 05/04/17 12:12:13 
5 05/04/17 12:12:48 
6 05/04/17 12:13:24 
7 05/04/17 12:13:58 

#Change system time to Atlantic Daylight Time (GMT+4) 
    Sys.setenv(TZ = "ADT") 
    Sys.time() 

#Combine date and time columns and convert into POSIXct object 
    df$datetime_ADT = paste(df$Date,df$Time) 
    df$datetime_ADT = dmy_hms(df$datetime_ADT) 
    str(df$datetime_ADT) 

    #create new column for UTC datetimes 
    df$datetime_utc = df$datetime_ADT 
    #transform ADT time into UTC time 
    attr(df$datetime_utc, "tzone") = "UTC" 
    #check timezone change worked! 
    df$datetime_utc[1] 
    df$datetime_ADT[1] 

    #change system timezone back to default 
    Sys.setenv(TZ = "") 
+0

'as.POSIXct(PA '%d /%m /%y%T%z'、tz = 'UTC') ' – alistaire

+0

ADTが見つかりませんでした。 UTC + 4これは私にとってはより正確なようですが、私は完全に間違っているかもしれませんdf [、DateTime:= mdy_hms(paste0(日付、時刻)、tz = 'カナダ/アトランティック')%>%with_tz( "UTC" '私は 'lubridate'と' data.table'と 'dplyr'を使用しています –

答えて

1

ASTは、実際にはUTC-4であり、ADTはUTC-3(Wikipedia)です。より堅牢

as.POSIXct(paste(df$Date, df$Time, '-0300'), format = '%d/%m/%y %T %z', tz = 'UTC') 
#> [1] "2017-04-05 15:10:26 UTC" "2017-04-05 15:11:01 UTC" 
#> [3] "2017-04-05 15:11:38 UTC" "2017-04-05 15:12:13 UTC" 
#> [5] "2017-04-05 15:12:48 UTC" "2017-04-05 15:13:24 UTC" 
#> [7] "2017-04-05 15:13:58 UTC" 

または、ADTにOlsonNames()から場所を選択し、属性を設定します:あなたが直接変換したい場合は、一度に読み込むときオフセットとUTCにタイムゾーンを設定し指定することができます

x <- as.POSIXct(paste(df$Date, df$Time), format = '%d/%m/%y %T', tz = 'America/Halifax') 
attr(x, 'tzone') <- 'UTC' 
x 
#> [1] "2017-04-05 15:10:26 UTC" "2017-04-05 15:11:01 UTC" 
#> [3] "2017-04-05 15:11:38 UTC" "2017-04-05 15:12:13 UTC" 
#> [5] "2017-04-05 15:12:48 UTC" "2017-04-05 15:13:24 UTC" 
#> [7] "2017-04-05 15:13:58 UTC" 

又はlubridateとdplyrにおいて、

library(dplyr) 
library(lubridate) 

df %>% transmute(datetime = dmy_hms(paste(Date, Time), tz = 'America/Halifax'), 
       datetime = with_tz(datetime, 'UTC')) 
#>    datetime 
#> 1 2017-04-05 15:10:26 
#> 2 2017-04-05 15:11:01 
#> 3 2017-04-05 15:11:38 
#> 4 2017-04-05 15:12:13 
#> 5 2017-04-05 15:12:48 
#> 6 2017-04-05 15:13:24 
#> 7 2017-04-05 15:13:58 
関連する問題