从 UTC 时间获取本地时间
Get the local time from a UTC time
假设我有一个包含日期、纬度和经度的数据集。
dt = data.table(date = c("2017-10-24 05:01:05",
"2017-10-24 05:01:57",
"2017-10-24 05:02:54"),
lat = c(-6.2704925537109375,
-6.2704925537109375,
-6.2704925537109375),
long = c(106.5803680419922,
106.5803680419922,
106.5803680419922))
时间是UTC。是否可以使用纬度和经度将该 UTC 转换为当地时间?
我找到了一个关于将经度和纬度转换为时区的好答案 here,下面是我们如何将该方法应用于您的用例。
library(data.table)
library(googleway)
library(lubridate)
dt = data.table(date = c("2017-10-24 05:01:05",
"2017-10-24 05:01:57",
"2017-10-24 05:02:54"),
lat = c(-6.2704925537109375,
-6.2704925537109375,
-6.2704925537109375),
long = c(106.5803680419922,
106.5803680419922,
106.5803680419922))
dt$date <- with_tz(as.POSIXct(dt$date), "UTC")
convert_time <- function(lat,lon,time_x)
{
my_time <- google_timezone(c(lat, lon), key = NULL)
as.POSIXct(format(time_x, tz=my_time$timeZoneId))
}
dt[,time_conv:=convert_time(lat,long,date),by=1:nrow(dt)]
输出:
date lat long time_conv
1: 2017-10-24 03:01:05 -6.270493 106.5804 2017-10-24 10:01:05
2: 2017-10-24 03:01:57 -6.270493 106.5804 2017-10-24 10:01:57
3: 2017-10-24 03:02:54 -6.270493 106.5804 2017-10-24 10:02:54
希望对您有所帮助!
重要提示:
- 请参阅下面 SymbolixAU 的评论。尽管从技术上讲您不需要,但根据 Google's requirements 您应该请求一个 API 密钥并在上面的
google_timezone()
函数中使用它。
- GoogleAPI有一定的使用限制。如果您计划在大型数据帧上执行此操作,请考虑仅对唯一的经度和纬度对进行子集化,甚至可能将它们四舍五入为
x
位。然后,您可以对这些独特的组合应用 google_timezone()
,然后将它们合并回原来的 dataframe
。
假设我有一个包含日期、纬度和经度的数据集。
dt = data.table(date = c("2017-10-24 05:01:05",
"2017-10-24 05:01:57",
"2017-10-24 05:02:54"),
lat = c(-6.2704925537109375,
-6.2704925537109375,
-6.2704925537109375),
long = c(106.5803680419922,
106.5803680419922,
106.5803680419922))
时间是UTC。是否可以使用纬度和经度将该 UTC 转换为当地时间?
我找到了一个关于将经度和纬度转换为时区的好答案 here,下面是我们如何将该方法应用于您的用例。
library(data.table)
library(googleway)
library(lubridate)
dt = data.table(date = c("2017-10-24 05:01:05",
"2017-10-24 05:01:57",
"2017-10-24 05:02:54"),
lat = c(-6.2704925537109375,
-6.2704925537109375,
-6.2704925537109375),
long = c(106.5803680419922,
106.5803680419922,
106.5803680419922))
dt$date <- with_tz(as.POSIXct(dt$date), "UTC")
convert_time <- function(lat,lon,time_x)
{
my_time <- google_timezone(c(lat, lon), key = NULL)
as.POSIXct(format(time_x, tz=my_time$timeZoneId))
}
dt[,time_conv:=convert_time(lat,long,date),by=1:nrow(dt)]
输出:
date lat long time_conv
1: 2017-10-24 03:01:05 -6.270493 106.5804 2017-10-24 10:01:05
2: 2017-10-24 03:01:57 -6.270493 106.5804 2017-10-24 10:01:57
3: 2017-10-24 03:02:54 -6.270493 106.5804 2017-10-24 10:02:54
希望对您有所帮助!
重要提示:
- 请参阅下面 SymbolixAU 的评论。尽管从技术上讲您不需要,但根据 Google's requirements 您应该请求一个 API 密钥并在上面的
google_timezone()
函数中使用它。 - GoogleAPI有一定的使用限制。如果您计划在大型数据帧上执行此操作,请考虑仅对唯一的经度和纬度对进行子集化,甚至可能将它们四舍五入为
x
位。然后,您可以对这些独特的组合应用google_timezone()
,然后将它们合并回原来的dataframe
。