【问题标题】:Configuring date command to meet my format配置日期命令以满足我的格式
【发布时间】:2015-01-04 16:22:39
【问题描述】:

我有一个 YYYY.MM.DD HH:SS 格式的日期(例如 2014.02.14 13:30)。我想使用 date 命令在几秒内转换它。

命令

日期 -d"2014.02.14 13:30" +%s

不会工作,因为点分离。

有什么想法吗?

【问题讨论】:

  • 有什么限制?如果您可以在 bash 脚本中执行此操作,请将其转换并去除点,然后转换为纪元。
  • 请注意:在freebsd上有-f

标签: linux bash date epoch


【解决方案1】:

为什么不让日期格式可以接受?只需用破折号替换点:

$ date --date="`echo '2014.02.14 13:30' | sed 's/\./-/g'`" +%s
1392370200

这里我先改一下格式:

$ echo '2014.02.14 13:30' | sed 's/\./-/g'
2014-02-14 13:30

然后将结果用作date的参数。

请注意,结果取决于您的时区。

【讨论】:

  • 我应该提到它在 awk 命令中通过管道作用: awk 'BEGIN{getline}{command=("date --date=\""$1" "$2"\"") ;而(....
  • 然后在awk 中使用gsub 函数进行相同的替换。
【解决方案2】:

你可以使用:

s='2014.02.14 13:30'
date -d "${s//./}"
Fri Feb 14 13:30:00 EST 2014

获取EPOCH值:

date -d "${s//./}" '+%s'
1392402600

【讨论】:

  • 为什么没有秒数不同??在每个ans中??
  • 哦,这是因为 EST 和 IST 得到了它:)
【解决方案3】:

使用 awk :

s=`echo "2014.02.14 13:30" |  awk '{gsub(/\./,"-",$0);print $0}'`
echo -d "$s"
date -d "$s" +%s

输出:

Fri Feb 14 13:30:00 IST 2014
1392364800

【讨论】:

    【解决方案4】:

    Perl: 不需要你修改字符串

    d="2014.02.14 13:30"
    epoch_time=$(perl -MTime::Piece -E 'say Time::Piece->strptime(shift, "%Y.%m.%d %H:%M")->epoch' "$d")
    echo $epoch_time
    
    1392384600
    

    时区:加拿大/东部

    【讨论】:

    • 谢谢,perl 看起来很强大,但一次只能使用一种语言。
    【解决方案5】:

    我终于解决了

    awk 'BEGIN{FS=","}{ gsub(/./," ",$1);gsub(/:/," ",$2); var=sprintf("%s %s 00",$1,$2);打印 mktime(var), $3,$4,$5,$6,$7 }' myfile |少

    所以我的文件:

    2014.09.24,15:15,1.27921,1.27933,1.279,1.27924,234

    成为

    1411582500 1.27921 1.27933 1.279 1.27924 234

    :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-24
      • 2013-06-06
      • 2016-01-26
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-10
      相关资源
      最近更新 更多