【问题标题】:covert character date to POSIXct将字符日期转换为 POSIXct
【发布时间】:2018-10-25 17:29:19
【问题描述】:

我从 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(df.weather$datetime, "%Y_%m_%d_%H"))?
  • 不幸的是,这仍然只给了我日期,而不是与之相关的小时。
  • 实际上它确实给了你时间。但是你被 print.POSIXt 的行为愚弄了,它忽略了打印午夜的时间。很确定以前有人问过并回答过这个问题,但我找了一个但找不到。
  • 谢谢。如果您将此作为答案,那么我可以接受。

标签: r posixct


【解决方案1】:

显示日期时间值的函数在午夜不打印分钟、秒或小时是不合适的:

# 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 和 "-"),但他也错过了核心问题。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 嗯...当我运行您的示例时,我得到了一个有用的答案“2010-10-31 01:00:00 GMT”,但是如果我将 datetime (2018_06_01_00) 的第一个值替换为相同的代码,我只得到“2018-06-01 GMT”。问题是最后两个数字(在本例中为 00)确实代表一个时间,并且可以具有 06、12 和 18 的值。
    • @user3220999 那是因为 Jan 不明白这个问题。你得到了一个日期时间结果。
    • 我认为这个答案是正确的。正如@42 指出的那样,这只是基于打印行为的问题。
    猜你喜欢
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2017-04-15
    • 2020-03-31
    • 1970-01-01
    相关资源
    最近更新 更多