r日期/时间戳不显示值图表显示的相同值

时间:2018-02-12 21:15:28

标签: r datetime utc gmt

我在源数据中有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。

感谢您的帮助

0 个答案:

没有答案