将字符日期转换为 POSIXct

covert character date to POSIXct

我从 RNCEP 包中导入了一些数据,其中包含日期时间戳(UTC 格式)作为字符:

> head(df.weather[1])
       datetime
1 2018_06_01_00
2 2018_06_01_00
3 2018_06_01_00
4 2018_06_01_00
5 2018_06_01_00
6 2018_06_01_00

年月日小时用下划线分隔。

我想将这些日期更改为 POSIXct,我可以使用以下方法获取日期:

df.weather$date<-as.POSIXct(
  str_replace_all(df.weather$datetime, "_", "-"), 
  format="%Y-%m-%d") 
head(df.weather[11])
       date
1 2018-06-01
2 2018-06-01
3 2018-06-01
4 2018-06-01
5 2018-06-01
6 2018-06-01

但是,如果我将格式更改为“%Y-%m-%d %H”或“%Y-%m-%d %H:%M”,我会得到以下信息:

  date
1 <NA>
2 <NA>
3 <NA>
4 <NA>
5 <NA>
6 <NA>

如何调整我的代码以将小时信息放入 POSIXct 变量?

你可以试试这个 as.POSIXct(strptime("2010_10_31_01", "%Y_%m_%d_%H"))。可能您想使用 tz 参数添加时区。如果小时等于 00,如您的示例所示,时间将自动删除。使用 01.

尝试相同的代码

显示日期时间值的函数存在不打印午夜时间的分钟、秒或小时的错误:

# First build a test vector of character values
 times <- scan(text="2018_06_01_00
  2018_06_01_00
  2018_06_01_00
  2018_06_01_00
  2018_06_01_00
  2018_06_01_00", what="")
#Read 6 items

# Now run your code
 realTimes<-as.POSIXct(
  str_replace_all(times, "_", "-"), 
  format="%Y-%m-%d") 
 realTimes

#[1] "2018-06-01 PDT" "2018-06-01 PDT" "2018-06-01 PDT" "2018-06-01 PDT"
#[5] "2018-06-01 PDT" "2018-06-01 PDT"

 dput(realTimes)
structure(c(1527836400, 1527836400, 1527836400, 1527836400, 1527836400, 
1527836400), class = c("POSIXct", "POSIXt"), tzone = "")

@ANG 的评论很有用(建议使用 format= "%Y_%m_%d_%H" 而不是更笨拙的 str_replace-ment with "-")但他也错过了中心问题。