【问题标题】:KSH : How to convert integer to date and add Minutes to it, in unixKSH:如何在 unix 中将整数转换为日期并添加分钟
【发布时间】:2017-08-14 09:14:17
【问题描述】:

我有一个数值 N1 = 20170708192012,并想转换为日期 就像是 : D1=echo $N1 | date -d '+%Y%m%d%H%M%S' 回声$D1

转换后添加 40 分钟以获取新日期。

【问题讨论】:

  • date 无法解析该格式的日期。 awk 是可接受的选项吗?
  • @randomir ,是的,可以选择 awk

标签: bash shell unix ksh


【解决方案1】:

您需要在将字符串传递给日期之前对其进行解析,因此:

 N1=$(awk '{ print substr($0,1,8)" "substr($0,9,2)":"substr($0,11,2)":"substr($0,13,2)}' <<< 20170708192012)

使用 awk 和 substr 函数以日期可接受的格式构建 N1。

【讨论】:

    【解决方案2】:

    如果您的 awk 支持 time functions mktimestrftime(这是 GNU 扩展),您可以先将输入字符串转换为 Unix 时间戳(通过手动拆分和使用 mktime),然后然后用strftime格式化输出:

    N1=20170708192012
    D1=$(awk '{ print strftime("%Y%m%d%H%M%S", mktime(substr($0,1,4)" "substr($0,5,2)" "substr($0,7,2)" "substr($0,9,2)" "(substr($0,11,2)+40)" "substr($0,13,2))) }' <<<"$N1")
    

    注意mktime 只接受"YYYY MM DD HH MM SS" 格式的日期,这就是我们需要手动构造它的原因。但是它会自动进行标准化,它会很高兴地将"2017 1 1 0 80 0" 转换为与"2017 1 1 1 20 0" 相同的时间戳。这就是为什么我们可以简单地将40 添加到输入的分钟数并获得正确的输出。

    根据您的意见,我们得到:

    echo $D1
    20170708200012
    

    【讨论】:

      猜你喜欢
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 2014-11-08
      • 2023-02-01
      • 1970-01-01
      相关资源
      最近更新 更多