将月份编号转换为月份名称

将月份编号转换为月份名称

有没有办法将月份数字转换为名称?

例子:

2013年10月22日将变为10月22日

我没有 GNU 日期,我的操作系统是 AIX。

答案1

如果您只需要将几个键映射到值,则只需使用数组

#!/bin/ksh

## cmdline argument is e.g. "2003-10-22"
DATE=$1

### extract day, month and year into separate variables
MONTHDAY=${DATE#*-}

YEAR=${DATE%%-*}
MONTH=${MONTHDAY%%-*}
DAY=${MONTHDAY#*-}

# an array to look up th month-names
# since month-numbers start with 1, the first element in the array is invalid.
set -A monthnames invalid Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

## perform the lookup
MONTHNAME=${monthnames[${MONTH}]}

## display "<Month> <DAY>"
echo ${MONTHNAME} ${DAY}

答案2

GNU date

$ date -d 2013-10-22 '+%b %-d'
Oct 22

OS X 和 FreeBSD date

$ date -jf %F 2013-10-22 '+%b %-d'
Oct 22

%b是月份名称缩写,%B是完整月份名称。

答案3

使用足够新的版本ksh

$ printf "%(%a %b %d %Y)T\n" 2013-10-22
Tue Oct 22 2013

(请注意,它是区域设置感知的,例如在西班牙语区域设置中,它将输出mar oct 22 2013

相关内容