如何在Shell中解析日期?

时间:2015-05-21 14:13:33

标签: bash shell parsing date time

现在我正在尝试解析我的获取时间和日期中的值并按每个数字分解

日期/时间的格式

#!/bin/bash 
prevDateTime=$(date +'%Y-%m-%d-%H:%M:%S')
echo "${prevDateTime}"

我希望能够像这样列出来

echo "${prevYear}"
echo "${prevMonth}"
echo "${prevDay}"
echo "${prevHour}"
echo "${prevMinute}"
echo "${prevSecond}"

然后喜欢

echo "${prevDate}"
echo "${precTime}"

但我不确定如何解析信息任何帮助都会很棒

3 个答案:

答案 0 :(得分:3)

正则表达式可能是最简单的解决方案,格式为prevDateTime

[[ $prevDateTime =~ (.*)-(.*)-(.*)-(.*):(.*):(.*) ]]
prevYear=${BASH_REMATCH[1]}
prevMonth=${BASH_REMATCH[2]}
# etc.

从技术上讲,使用declare有一个“一个”线路:

declare $(date +'prevDateTime=%Y-%m-%d:%H:%M:%S
prevYear=%Y
prevMonth=%m
prevDat=%d
prevHour=%H
prevMinute=%M
prevSecond=%S')

它使用date输出declare实例化的参数分配块。 (请注意,未引用命令替换,因此每个赋值都被视为declare的单独参数。如果要分配的值中有任何空格,则必须切换到使用eval输出与date略有不同。)

答案 1 :(得分:1)

使用剪切快速解决方案:

#!/bin/bash 
prevDateTime=$(date +'%Y-%m-%d-%H:%M:%S')
echo "${prevDateTime}"

prevYear=`echo $prevDateTime | cut -d- -f1`
prevMonth=`echo $prevDateTime | cut -d- -f2`
prevDay=`echo $prevDateTime | cut -d- -f3`
prevHour=`echo $prevDateTime | cut -d- -f4 | cut -d: -f1`
prevMinute=`echo $prevDateTime | cut -d- -f4 | cut -d: -f2`
prevSecond=`echo $prevDateTime | cut -d- -f4 | cut -d: -f3`

echo "Year: $prevYear; Month: $prevMonth; Day: $prevDay"                                                                                                                                                                                                                       
echo "Hour: $prevHour; Minute: $prevMinute; Second: $prevSecond"

答案 2 :(得分:1)

您可以使用read命令与IFS分解日期组件:

prevDateTime=$(date +'%Y-%m-%d-%H:%M:%S')
IFS='-:' read -ra arr <<< "$prevDateTime"

# print array values
declare -p arr
# This outputs
#   declare -a arr='([0]="2015" [1]="05" [2]="21" [3]="10" [4]="24" [5]="28")'

#assign to other variables
prevYear=${arr[0]}
prevMonth=${arr[1]}
prevDay=${arr[2]}
prevHour=${arr[3]}
prevMinute=${arr[4]}
prevSecond=${arr[5]}