R 如何从GMT转换为x2B;4时区转换为UTC

R 如何从GMT转换为x2B;4时区转换为UTC,r,datetime,utc,R,Datetime,Utc,我在大西洋夏令时(GMT+4)中有一个datetime列,希望使用以下代码转换为UTC,但我很难找到正确的tzone以使代码正常工作(它无法识别ADT或GMT+4)。请有人能帮忙,因为我正在兜圈子,tzone的帮助页面没有提供解决方案 示例数据: > 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"), Ti

我在大西洋夏令时(GMT+4)中有一个datetime列,希望使用以下代码转换为UTC,但我很难找到正确的tzone以使代码正常工作(它无法识别ADT或GMT+4)。请有人能帮忙,因为我正在兜圈子,tzone的帮助页面没有提供解决方案

示例数据:

> 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 = "") 

AST实际上是UTC-4,ADT是UTC-3()。如果要直接转换,可以在读取时间时指定偏移量,并将时区设置为UTC:

as.POSIXct(粘贴(df$Date,df$Time,'-0300'),格式='%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()
中选择一个位置并设置属性:

x[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”
或在dplyr中使用lubridate

库(dplyr)
图书馆(lubridate)
df%>%转换(日期时间=dmy_hms(粘贴(日期、时间),tz=‘美国/哈利法克斯’),
datetime=带_tz(datetime,'UTC'))
#>日期时间
#> 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

as.POSIXct(粘贴(df$Date,df$Time,+0400'),格式='%d/%m/%y%T%z',tz='UTC')
我找不到UTC加4的ADT。这对我来说似乎更准确,但我可能完全错了
df[,DateTime:=mdy_-hms(paste0(Date,Time),tz='Canada/Atlantic')%>%和_-tz(“UTC”)]
。我正在使用
lubridate
数据。表
dplyr