在R中更改日期和时间格式的问题

Problem with changing format of date and time in R

我在 R 中遇到日期和时间格式问题。

我的 R 代码格式为:“%Y%m%d %H%M%OS”。例如:“20170929 20:59:56.149”

我的时间是字符变量。

我正在尝试编写一个 R 代码,其中格式类型将转换为格式“%Y-%m-%d %H:%M:%OS”

(data <- strptime(data$time, 
                    format = "%Y-%m-%d  %H:%M:%OS", 
                    tz = "GMT")) 

或者例如

data$time <- as.POSIXct(data$time, format = "%Y-%m-%d  %H:%M:%OS")

但是,我得到了 NA。这可能是由什么引起的?你知道如何解决它吗?预先感谢您的帮助!

来自手册help(strftime)如果指定的时间无效(例如'"2010-02-30 08:00"')结果的所有组成部分都是'NA'。

此外,如果您想操作日期的输出格式,您需要将日期存储为 Date-class(@izyda 评论的插图)。

首先,重新格式化您的日期以使其更易于操作:

data <- "20170929 20:59:56.149"
dat_new <- paste( paste( substr(data, 1, 4), 
   substr(data, 5, 6), substr(data, 7, 8), sep="-" ), 
   substr(data, 10,nchar(data)) )
dat_new
[1] "2017-09-29 20:59:56.149"

然后,将 class 更改为日期:

dat_cor <- as.POSIXct( dat_new, tz="GMT" )
dat_cor
[1] "2017-09-29 20:59:56 GMT"
class(dat_new)
[1] "character"
class(dat_cor)
[1] "POSIXct" "POSIXt"

最后,选择输出格式:

strftime( dat_cor, format="%m/%d/%Y %H:%M:%OS3", tz="GMT" )
[1] "09/29/2017 20:59:56.148"
# or
strftime( dat_cor, format="%Y-%d-%m %H:%M:%OS3", tz="GMT" )
[1] "2017-29-09 20:59:56.148"

我认为@izyda 已经消除了困惑。您在 strptime 中包含的格式是您拥有的数据的格式,因此在这种情况下您使用 -

x <- "20170929 20:59:56.149"
strptime(x, format = "%Y%m%d  %H:%M:%OS", tz = "GMT")
#[1] "2017-09-29 20:59:56 GMT"

同样适用于as.POSIXct

或者,如果您对不同的格式感到困惑或厌倦了参考 ?strptime,您可以使用 lubridate 包。在这种情况下,函数 ymd_hms 会有所帮助。

lubridate::ymd_hms(x)
#[1] "2017-09-29 20:59:56 UTC"