如何将UTC中的日期和时间转换为R中的本地时间?
我有一个数据帧(如何将UTC中的日期和时间转换为R中的本地时间?,r,date,datetime,time,timezone,R,Date,Datetime,Time,Timezone,我有一个数据帧(vlinder),如下所示,其中日期和时间戳(UTC)在单独的列中: date time.utc variable 1/04/2020 0:00:00 12 1/04/2020 0:05:00 54 在第一步中,我使用以下代码将date和time变量组合到一个名为dateandtime的列中: vlinder$dateandtime <- paste(vlinder$date, vlinder$time.utc) 我想将UTC时间转换为本地时间(
vlinder
),如下所示,其中日期和时间戳(UTC)在单独的列中:
date time.utc variable
1/04/2020 0:00:00 12
1/04/2020 0:05:00 54
在第一步中,我使用以下代码将date
和time
变量组合到一个名为dateandtime
的列中:
vlinder$dateandtime <- paste(vlinder$date, vlinder$time.utc)
我想将UTC时间转换为本地时间(即CEST,因此时差为2小时)
我试着使用下面的代码,但我得到了完全不同的东西
vlinder$dateandtime <- as.POSIXct(vlinder$dateandtime, tz = "UTC")
vlinder$dateandtime.cest <- format(vlinder$dateandtime, tz = "Europe/Brussels", usetz = TRUE)
我怎样才能解决这个问题?
非常感谢 as.POSIXct的默认格式要求按年-月-日排序的日期。因此,2020年4月1日被转换为第1年的4月20日 您只需将时间格式添加到
as.POSIXct
:
vlinder$dateandtime <- as.POSIXct(vlinder$dateandtime, tz = "UTC", format = "%d/%m/%Y %H:%M:%S")
format(vlinder$dateandtime, tz = "Europe/Brussels", usetz = TRUE)
vlinder$dateandtime这里有一个lubridate
和tidyverse
答案。一些数据整理、数据类型更改,然后bam。检查有效时区(tz
)的lubridate::OlsonNames()。(我不能肯定我选择了正确的tz
)
date time.utc variable dateandtime dateandtime.cest
1/04/2020 0:00:00 12 0001-04-20 0001-04-20 00:17:30 LMT
1/04/2020 0:05:00 54 0001-04-20 0001-04-20 00:17:30 LMT
vlinder$dateandtime <- as.POSIXct(vlinder$dateandtime, tz = "UTC", format = "%d/%m/%Y %H:%M:%S")
format(vlinder$dateandtime, tz = "Europe/Brussels", usetz = TRUE)
library(tidyverse)
library(lubridate)
df <- read.table(header = TRUE,
text = "date time.utc variable
1/04/2020 00:00:00 12
1/04/2020 00:05:00 54")
df <- df %>%
mutate(date = mdy(date),
datetime_utc = as_datetime(paste(date, time.utc)),
datetime_cest = as_datetime(datetime_utc, tz = 'Europe/Brussels'))
date time.utc variable datetime_utc datetime_cest
1 2020-01-04 00:00:00 12 2020-01-04 00:00:00 2020-01-04 01:00:00
2 2020-01-04 00:05:00 54 2020-01-04 00:05:00 2020-01-04 01:05:00