我有两个字符形式的时间戳,我想在R中转换为POSIX格式。
timestamps
是:
1: "2013-03-30 17:45:00"
2: "2013-03-31 02:05:00"
第一个转换为罚款,第二个转换为NA
。 timestamps
从characters
下载为SQL server
。任何人都有任何想法会出错?
我没有附加屏幕截图的声誉,因此我的R控制台的屏幕截图显示了结果:http://emillarsen.com/r%20console.jpg
答案 0 :(得分:8)
它看起来像是DST问题。我假设您来自Sweden或其附近。 2013年3月31日凌晨2点到凌晨3点之间,瑞典没有时间,因为时钟已经过去了。
as.POSIXct("2013-03-31 02:05:00",format="%Y-%m-%d %H:%M:%S", tz="Europe/Stockholm")
[1] NA
对于中欧时间(CET)的任何人都是如此。
答案 1 :(得分:0)
它为我工作。正如论坛中的人所评论的那样 - 可能是TimeZone
个问题。但是我已经添加了这样做的方法
将字符值转换为POSIXct的一种方法:
dates <- c("1992-02-27", "1992-02-27", "1992-01-14", "1992-02-28", "1992-01-02")
times <- c("23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26")
X <- paste(dates, times)
str(x)
chr [1:5] "1992-02-27 23:03:20" "1992-02-27 22:29:56" ...
dt <- strptime(x, "%Y-%m-%d %H:%M:%S")
dt
[1] "1992-02-27 23:03:20" "1992-02-27 22:29:56" "1992-01-14 01:03:30"
[4] "1992-02-28 18:21:03" "1992-01-02 16:56:26"
str(dt)
POSIXlt[1:5], format: "1992-02-27 23:03:20" "1992-02-27 22:29:56" ...
另一种方式:当你走近时
> now <- Sys.time()
> now
[1] "2014-01-16 16:58:23 IST"
> as.POSIXlt(as.character(now),tz="GMT")
[1] "2014-01-16 17:05:24 GMT"
> str(as.POSIXlt(now))
POSIXlt[1:1], format: "2014-01-16 16:58:23"
> unclass(as.POSIXlt(now))
$sec
[1] 23.1636
$min
[1] 58
$hour
[1] 16
$mday
[1] 16
$mon
[1] 0
$year
[1] 114
$wday
[1] 4
$yday
[1] 15
$isdst
[1] 0
attr(,"tzone")
[1] "" "IST" "IST"
答案 2 :(得分:0)
我有同样的问题。
我找到的一种解决方法是将GMT
中的Timezone
更改为tz="GMT"
:
as.POSIXct(x = c("2013-03-31 02:05:00"),
format="%Y-%m-%d %H:%M:%S",
tz="GMT"
)
# [1] "2013-03-31 02:05:00 GMT"