R错误中的格式化时间

时间:2018-06-26 23:20:22

标签: r posixct

我的Time中有一个df列,值是1.01.2016 0:00:05。我希望它没有秒,因此使用了df$Time <- as.POSIXct(df$Time, format = "%d.%m.%Y :%H:%M", tz = "Asia/Kolkata")。但是我得到了NA的价值。这是什么问题?

2 个答案:

答案 0 :(得分:2)

我怀疑这里有两件事:时间对象(POSIXt)的存储,以及该对象的表示

您提出的字符串(我相信)不是R的正确POSIXt对象(无论是POSIXct还是POSIXlt),这意味着它只是一个字符串。在这种情况下,您可以使用以下方法将其删除:

gsub(':[^:]*$', '', '1.01.2016 0:00:05')
# [1] "1.01.2016 0:00"

但是,它仍然只是一个字符串,而不是日期或时间对象。如果将其解析为R知道的时间对象:

as.POSIXct("1.01.2016 0:00:05", format = "%d.%m.%Y %H:%M:%S", tz = "Asia/Kolkata")
# [1] "2016-01-01 00:00:05 IST"

然后,您现在有了一个时间对象,R对...有所了解,并且它默认为表示(在控制台上打印),精度为秒。通常,对于控制台打印而言,所有可更改的都是秒的精度,如

options("digits.secs")
# $digits.secs
# NULL
Sys.time()
# [1] "2018-06-26 18:21:06 PDT"
options("digits.secs"=3)
Sys.time()
# [1] "2018-06-26 18:21:10.090 PDT"

那么您可以获得更多。但是,我确实知道有一个R选项可以说“始终以这种方式打印我的POSIXt对象”。因此,唯一的选择是(在不再需要它成为类似时间的对象的时候)将其更改回没有类似时间值的字符串:

x <- as.POSIXct("1.01.2016 0:00:05", format = "%d.%m.%Y %H:%M:%S", tz = "Asia/Kolkata")
x
# [1] "2016-01-01 00:00:05 IST"
?strptime
# see that day-of-month can either be "%d" for 01-31 or "%e" for 1-31
format(x, format="%e.%m.%Y %H:%M")
# [1] " 1.01.2016 00:00"

(这对矢量同样有效。)

与我的POSIXt示例相反,我的一部分建议将其转换为gsub并返回到字符串,因为使用as.POSIXct会告诉您何时字符串与类似日期时间的字符串不匹配对象,而gsub会很乐意做错事或什么都不做。

答案 1 :(得分:1)

尝试asPOSIXlt

> test <- "1.01.2016 0:00:05"
> as.POSIXlt(test, "%d.%m.%Y %H:%M:%S", tz="Asia/Kolkata")
[1] "2016-01-01 00:00:05 IST"