我在源数据中有GMT / UTC的日期/时间戳。我试图根据机场代码获取当地日期/时间(根据适用情况更正为夏令时)。我遇到的问题是,当我将两次打印到新的data.table
时,GMT列将不会保留在GMT中,本地列也不会保留在机场当地时间。他们不断恢复到本地系统。通过查看Environment框架中的Values,我可以看到代码正在工作。我已经尝试过force_tz函数,posixct函数以及我在网上找到的其他一些函数,但是我一直得到相同的结果。
这是我的代码。
library(readxl)
library(data.table)
library(plyr)
library(tidyr)
library(dplyr)
library(tibble)
library(fastmatch)
library(stringr)
library(magrittr)
library(RcppBDT)
library(lubridate)
library(openxlsx)
##library(anytime)
## Load time zone data sheet
TZData <- read_excel("TZDataFile.xlsx")
TZData <- as.data.table(TZData)
TZRange <- TZData[,1]
TZRange <- as.data.frame(TZRange)
##Bring in test data
TD <- read_excel("Test dates.xlsx", col_types = c("text", "text"))
TD <- as.data.table(TD)
####Start Time Conversion Code####
## Define variables
Station <- TD[,1] ##Station
GMT <- TD[,2] ##Date/time stamp in GMT to be converted to local
z <- nrow(TD)+0
APLDateTime <- data.frame(GMT = as.POSIXct(as.Date(character()), tz = "UTC"),
Local = as.POSIXct(as.Date(character())))
for (i in 1:z) {
STA <- as.character(Station[i,1]) ## Get Station
APCode <- as.integer(fmatch(STA, TZRange[,1])) ## Match station on Time Zone Data sheet
TZO <- as.integer(TZData[APCode,4]) ## get Station specific Time Zone Offset
TZDC <- as.character(TZData[APCode,3])
GMTDteTmeStamp <- as.double(TD[i,2]) ## get GMT time to be converted
GMTDteTmeValue <- as.POSIXct((GMTDteTmeStamp) * 86400
, origin = as.POSIXct("1899-12-30", tz = "UTC")
, tz = "UTC")
APLDteTmeValue2 <- as.POSIXct((GMTDteTmeStamp) * 86400, origin = "1899-12-30", tz = TZDC)
test = force_tz(GMTDteTmeValue, "UTC")
APLDateTime[i,1] <- test
APLDateTime[i,2] <- APLDteTmeValue2
}
我的示例数据是:
Sta GMT Dept
1: LHR 43138.51666666667
2: PHL 43139.51666666667
3: DFW 43168.51666666667
4: DFW 43169.51666666667
5: DFW 43170.51666666667
6: DFW 43171.51666666667
7: DFW 43172.51666666667
8: PHX 43141.51666666667
9: LAX 43142.51666666667
10: BCN 43143.51666666667
11: SCL 43144.51666666667
12: GIG 43176.51666666667
13: GIG 43177.51666666667
14: GIG 43178.51666666667
我的代码包含相对于机场代码的时区代码。
Therefore the TZDC would be:
LHR = "Europe/London"
DFW = "America/Chicago"
GIG = "America/Sao_Paulo"
所有行的GMT时间应为12:24。
感谢您的帮助