【问题标题】:How to convert y%m%d%H format into "%Y%m%d %H:%M:%S" in time series data如何将时间序列数据中的 y%m%d%H 格式转换为“%Y%m%d %H:%M:%S”
【发布时间】:2012-07-23 14:06:58
【问题描述】:

如何将y%m%d%H 格式转换为"%Y%m%d %H:%M:%S"。我的日期从 1970 年到 2010 年。

【问题讨论】:

  • 日期
  • 你上面的建议似乎对我有用:作为一个小例子(提示,见tinyurl.com/reproducible-000):strptime("2012 5 10 13",format="%Y %m %d %H")[1] "2012-05-10 13:00:00"
  • %Y%m%d%H 使用这种格式它可以工作,但格式是 %y%m%d%H 示例 00010100(2000010100)

标签: r time-series


【解决方案1】:

部分来自 cmets(如果您可以相应地修改问题会很好),这似乎不是格式化的情况(%y vs %Y 或间距/分隔符),而是@987654323 @/POSIX*t 自动设置格式以在指定“午夜”时间时跳过小时/分钟/秒。 (这是我目前基于以下示例的猜测,但我可能遗漏了一些东西。)

%y,非午夜时间:

> str(strptime("00020304",format="%y%m%d%H"))
 POSIXlt[1:1], format: "2000-02-03 04:00:00"

同上,午夜时间:

> str(strptime("00020300",format="%y%m%d%H"))
 POSIXlt[1:1], format: "2000-02-03"

午夜时间(带空格)

> str(strptime("00 02 03 00",format="%y %m %d %H"))
 POSIXlt[1:1], format: "2000-02-03"

一个具有一个午夜和一个非午夜时间的向量:

> str(strptime(c("00020300","00020304"),format="%y%m%d%H"))
 POSIXlt[1:2], format: "2000-02-03 00:00:00" "2000-02-03 04:00:00"

所以看起来德克的答案是正确的方法。

【讨论】:

    【解决方案2】:

    试试这个:

    R> Sys.Date()
    [1] "2012-07-23"
    R> format(Sys.Date())
    [1] "2012-07-23"
    R> format(Sys.Date(), "%Y-%m-%d %H:%M:%S")
    [1] "2012-07-23 00:00:00"
    R> 
    

    因为您可能有一个 Date 类型,根据定义,它没有小时/分钟/秒信息 - 为此使用 POSIXct。请参阅help(DateTimeClasses) 详细信息,并在此处和各种邮件列表中发布大量帖子以及工作示例。

    【讨论】:

    • %Y%m%d%H 使用这种格式它可以工作,但格式是 %y%m%d%H 示例 00010100(2000010100)
    • 根据我下面的测试,并不是说 OP 有 Date 类型,而是 POSIX*t 似乎将格式设置为在日期为时跳过 H/M/S午夜时间。
    • 这也是可能的,但由于他从未通过可重复的示例告诉我们,我们无法真正判断,不是吗?
    • cmets 中有示例(如果有的话)。值得赞扬的是 OP(尽管这不是一个写得很好的问题),事实上(似乎)POSIX*t 为具有全午夜和一些非午夜时间的向量设置了不同的格式,这可能会令人困惑(再次恕我直言)不是一个很好的默认行为选择。
    猜你喜欢
    • 2019-01-28
    • 2020-03-18
    • 2020-05-09
    • 2021-11-26
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    相关资源
    最近更新 更多