【问题标题】:Convert 4 digits into a DateTime (Year + padded with minimum values)将 4 位数字转换为日期时间(年份 + 用最小值填充)
【发布时间】:2016-11-17 21:20:40
【问题描述】:

我正在编写一个脚本来根据用户输入返回一个格式化的日期,可以是:

  • 2016
  • 2016/11
  • 2016/11/10
  • 2016/11/10 24

基本上我必须用最小的可能值填充这些输入。 (2016 返回 2016/01/01 00:00:00)。

我尝试过使用 date -d "2016" 进行操作,但这会返回今天晚上 8:16 的时间

非常感谢!!

【问题讨论】:

  • 请将该示例输入的所需输出添加到您的问题中。
  • (2016 年返回 2016/01/01 00:00:00).... 就在那里 :)

标签: bash shell unix ksh


【解决方案1】:

这是一个基本上应该做你想做的事情的脚本:

#!/bin/bash
echo INPUT:$1

[[ "$1" == "" ]] && YEAR=2016
[[ "$1" =~ ^[0-9]{4}$ ]] && YEAR="$1"
[[ $YEAR == "" ]] && YEAR=`echo "$1" | grep -Po ".*(?=/[0-9]{2}/)"`
MONTH=`echo "$1" | grep -Po "(?<=[0-9]{4}/).*(?=/[0-9]{2})"`
DAY=`echo "$1" | grep -Po "(?<=/[0-9]{2}/).*(?=\ )"`
HR=`echo "$1" | grep -Po "(?<=[0-9]{2}\ ).*"`
MIN="00"
SEC="00"
[[ "$MONTH" == "" ]] && MONTH="01"
[[ "$DAY" == "" ]] && DAY="01"
[[ "$HR" == "" ]] && HR="00"

echo $YEAR/$MONTH/$DAY $HR:$MIN:$SEC

请注意,这是一个基本框架,您必须添加自己的边界案例和条件。

【讨论】:

    【解决方案2】:

    你可以使用 date 命令来得到你的输出,如下所示

    d1=date +%Y #输出是2016 d2=date +%Y/%m #输出是2016/11 d3=date +%Y/%m/%d #输出是2016/11/10 d4=date +%Y/%m/%d\t%H #Output is 2016 -> \t-tab指定,如果你想要整个时间你可以使用“%X or %T”而不是“%H”

    回显 $d1 回声$d2 回声$d3 回声$d4

    【讨论】:

    • 对于用户输入日期,请​​从 used 中获取输入并将其保存在变量中,并使用 cut 或 sed 命令根据您的输出获取 4 次
    猜你喜欢
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 2019-08-12
    • 2022-08-09
    相关资源
    最近更新 更多