如何在 R 中将日期和时间从 UTC 转换为本地时间?
How to convert date and time from UTC to local time in R?
我有一个如下所示的数据框 (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)
这导致数据框中多了一列 vlinder
:
date time.utc variable dateandtime
1/04/2020 0:00:00 12 1/04/2020 0:00:00
1/04/2020 0:05:00 54 1/04/2020 0:05:00
我想将 UTC 时间转换成本地时间(是 CEST,所以时差为 2 小时)。
我尝试使用以下代码,但得到的结果完全不同。
vlinder$dateandtime <- as.POSIXct(vlinder$dateandtime, tz = "UTC")
vlinder$dateandtime.cest <- format(vlinder$dateandtime, tz = "Europe/Brussels", usetz = TRUE)
这导致:
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
我该如何解决这个问题?
非常感谢!
as.POSIXct
的默认格式需要按 Year-Month-Day 排序的日期。因此日期 01/04/2020 被翻译成第 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)
这是 lubridate
和 tidyverse
的答案。一些数据整理,数据类型更改,然后 bam。检查 lubridate::OlsonNames()
的有效时区 (tz
)。 (我不确定我选择了正确的 tz
。)
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
我有一个如下所示的数据框 (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)
这导致数据框中多了一列 vlinder
:
date time.utc variable dateandtime
1/04/2020 0:00:00 12 1/04/2020 0:00:00
1/04/2020 0:05:00 54 1/04/2020 0:05:00
我想将 UTC 时间转换成本地时间(是 CEST,所以时差为 2 小时)。
我尝试使用以下代码,但得到的结果完全不同。
vlinder$dateandtime <- as.POSIXct(vlinder$dateandtime, tz = "UTC")
vlinder$dateandtime.cest <- format(vlinder$dateandtime, tz = "Europe/Brussels", usetz = TRUE)
这导致:
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
我该如何解决这个问题? 非常感谢!
as.POSIXct
的默认格式需要按 Year-Month-Day 排序的日期。因此日期 01/04/2020 被翻译成第 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)
这是 lubridate
和 tidyverse
的答案。一些数据整理,数据类型更改,然后 bam。检查 lubridate::OlsonNames()
的有效时区 (tz
)。 (我不确定我选择了正确的 tz
。)
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