我想将自定义日期格式DD-%%%-YYYY
转换为标准日期格式:YYYYMMDD
%%%
的可能值为:
Jan Fev Mar Avr Mai Jun Jui Aou Sep Oct Nov Dec
假设输入是bash变量,如何将其转换为标准格式?
示例:
$ fr_date='09-Aou-2018'
$ # [transformation]
# sql_date should now contain 20180809
$ echo "$sql_date"
20180809
答案 0 :(得分:1)
您可以使用date
实用程序。
fr_date='09-Aug-2018'
sql_date="$(date --date=$fr_date +%Y%m%d)"
echo $sql_date
20180809
有关更多信息,请参阅date man page。
此外,date
不支持自定义语言环境,格式必须与语言环境无关。尝试将日期存储为简单的Unix时代。
答案 1 :(得分:0)
tmp=${fr_date/Fev/Feb} tmp=${tmp/Avr/Apr} tmp=${tmp/Mai/May}
tmp=${tmp/Jui/Jul} tmp=${tmp/Aou/Aug}
sql_date=$(date +%Y%m%d -d "$tmp")
tmp=$(sed 's/Fev/Feb;s/Avr/Apr;s/Mai/May;s/Jui/Jul;s/Aou/Aug' <<<"$fr_date")
sql_date=$(date +%Y%m%d -d "$tmp")
#!/bin/bash
# Requires bash 4 for associative arrays
declare -A month_map=(
[Jan]=01 [Fev]=02 [Mar]=03 [Avr]=04 [Mai]=05 [Jun]=06
[Jui]=07 [Aou]=08 [Sep]=09 [Oct]=10 [Nov]=11[Dec]=12
)
IFS=- read -r day month year <<<"$fr_date"
sql_date=$year${month_map[$month]}$day