在R中使用as.POSIXct,给相同的字符结构提供na。

问题描述 投票:5回答:3

我有两个字符形式的时间戳,我想在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.comr%20console.jpg。

r timestamp
3个回答
11
投票

它看起来像一个DST问题。我假设从你的名字你是来自 瑞典 或大约在那里。在瑞典,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)的任何人来说都是如此。


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"

0
投票

嗯,我也有同样的问题。

我发现解决这个问题的一个方法是改用 GMT 我的 Timezonetz="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"
© www.soinside.com 2019 - 2024. All rights reserved.