我正在使用从2016年1月1日到2016年8月31日期间拥有数百万时间戳记录的数据集。它们作为字符读入,我将其转换为:
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.phonegap.helloworld" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0">
<name>yal</name>
<description>
A blank PhoneGap app.
</description>
<author email="support@phonegap.com" href="http://phonegap.com">
PhoneGap Team
</author>
<content src="index.html" />
<access origin="*" />
<plugin name="cordova-sqlite-ext" spec="~0.10.2" />
除了2016年3月13日凌晨2点到3点之间的记录外,它们都正确转换。夏令时从第13马赫的凌晨2点开始。
这些记录打印为日期时间,但似乎记录为NA,这使我无法进一步操作字段。以下是我隔离这些记录的数据集的头部和摘要:
dt$dropoffDT<-strptime(dt$dropoffDT, format="%Y-%m-%d %H:%M:%S")
你的想法很赞赏。谢谢!
答案 0 :(得分:0)
转换例程具有在非DST基础中编码的日期时间的方法。考虑使用&#34; UCT&#34; (或&#34; GMT&#34;)适用于所有时间:
as.POSIXct(dt$dropoffDT, format="%Y-%m-%d %H:%M:%S", usetz=TRUE, tz="UCT")
MCVE:
dt <- # made with dput(dt)
structure(list(dropoffDT = structure(c(1L, 5L, 2L, 3L, 4L, 6L
), .Label = c("2016-03-12 02:09:45", "2016-03-13 02:01:00", "2016-03-13 02:05:25",
"2016-03-13 02:08:00", "2016-03-13 02:15:52", "2016-03-14 02:00:10"
), class = "factor")), .Names = "dropoffDT", class = "data.frame", row.names = c(NA,
-6L))
as.POSIXct(dt$dropoffDT, format="%Y-%m-%d %H:%M:%S", usetz=TRUE, tz="GMT")
[1] "2016-03-12 02:09:45 GMT" "2016-03-13 02:15:52 GMT"
[3] "2016-03-13 02:01:00 GMT" "2016-03-13 02:05:25 GMT"
[5] "2016-03-13 02:08:00 GMT" "2016-03-14 02:00:10 GMT"
我之后才看到lubridate
方面。我不是该套餐的用户。使用字母tz
扫描函数使我认为这些函数需要在“日期时间”格式中使用参数。
我发现R中的时区参数非常混乱(而且我不是唯一的:Confused by DateTime offsets。)该提问者使用正确的格式来指定具有偏移的非DST区域:美国我所在的太平洋标准区tz="Etc/GMT+8"
,注意到使用了加号,尽管我们的时间需要比伦敦时间少8小时。
当我在这些方面工作时,我通常需要进行测试:
strftime( Sys.time(), usetz=TRUE, tz="Etc/GMT-7")
#[1] "2016-12-04 23:53:42 GMT-7"
# No, it's not midnight here
strftime( Sys.time(), usetz=TRUE, tz="Etc/GMT+7")
#[1] "2016-12-04 09:53:52 GMT+7"
# it's not 9:53A either
strftime( Sys.time(), usetz=TRUE)
#[1] "2016-12-04 08:54:13 PST"
strftime( Sys.time(), usetz=TRUE, tz="Etc/GMT+8")
#[1] "2016-12-04 08:54:26 GMT+8"