Bash:如何将数字转换为月份字符串?

时间:2012-04-11 01:12:43

标签: bash

我想映射,例如,4到'Apr'(月份名称的3个字符缩写)

3 个答案:

答案 0 :(得分:18)

试试这个:

MONTHS=(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)

echo ${MONTHS[3]}

或者按照@ potong的建议(月份号和索引之间有1-1对应关系)

MONTHS=(ZERO Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)

echo ${MONTHS[4]}

答案 1 :(得分:14)

#! /bin/bash
case $1 in 
  [1-9]|1[0-2])     date -d "$1/01" +%b ;;
  *)            ;  exit 1
esac

答案 2 :(得分:4)

可以像这样获得对语言环境敏感的结果;将数字放入日期的月份位置,作为日期输出到日期,并选择任意年份和日期(远离50年代和远期未来,并避免大于20的日期)。它不是实际年份:

i=10; date -d 2012/${i}/01 +%b

在这里,使用locale de_DE,我得到结果:

Okt

(我没有选择四月,因为它是当前月份的默认日期,所以对于格式错误的-d -date,你得到四月,即使我= 10。我知道,因为我此外:四月份的德语名称是四月份,所以它不能很好地作为现在的精细细节的例子:)

i=10; LC_ALL=C date -d 2012/${i}/01 +%b

这显示了国际标准风格的月份。

该解决方案的优势在于,它将在革命中存活下来,将月份重新命名为Brumaire,Obamer或国际化尝试(Mär,Mai,Okt,Dez in German,ie)。