【问题标题】:Shell script to convert a date string to specific timestamp format用于将日期字符串转换为特定时间戳格式的 Shell 脚本
【发布时间】:2020-03-18 10:48:58
【问题描述】:

我有一个像 17-Mar-2020.22:22 -0300 这样的日期时间字符串。我想得到 2020-03-17 22:12 的输出。

时区偏移导致了一个问题,因为没有我能够转换

例如DATE=17-Mar-2020.22:22 date -jf "%d-%b-%Y.%H:%M" $DATE "+date \"%Y-%m-%d %H:%M\""

但是这个时区偏移会导致问题。有人可以帮忙吗?

【问题讨论】:

  • 有人可以帮忙吗

标签: linux bash shell awk datetime-format


【解决方案1】:

因为输入的格式不常见,需要先格式化成date可以吃的格式。我使用手册页"2004-02-29 16:21:42""Sun, 29 Feb 2004 16:21:42 -0800" 中指示的格式。 GNU 日期允许非常灵活的输入格式 - 不要相信它。

下面我使用sed匹配输入并重新格式化。

input='17-Mar-2020.22:22 -0300'
input2="$(sed 's/\([0-9]*\)-\([^-]*\)-\([^\.]*\)\.\([0-9]*\):\([0-9]*\)/\1 \2 \3 \4:\5:00/' <<<"$input")"
# input2="17 Mar 2020 22:22:00 -0300"
date --date="$input2" +"%Y-%m-%d %H:%M"
# 2020-03-18 02:22

日期 -jf

GNU dateBSD date 有很大不同。它们完全不同。 BSD date 支持-j-f 选项,GNU date 不支持。

dateutils,它们包括strptime 实用程序,允许对日期执行您想做的事情:

strptime -e -f "%Y-%m-%d %H:%M\n" -i "%d-%b-%Y.%H:%M %Z" "17-Mar-2020.22:22 -0300"

【讨论】:

  • --我在 bash 和 macosx 终端中都得到了date: illegal option -- - usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]。在这一行date --date="$input2" +"%Y-%m-%d %H:%M"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多