如何在unix日期的天号上添加后缀?
我会解释。我有一个TextMate包snippit,写出今天的日期。它使用unix日期和格式。这是代码:
`date +%A` `date +%d` `date +%B` `date +%Y`
输出:
2010年3月22日星期一
我想将后缀添加到天( st , nd , rd 和 )喜欢这样:
2010年3月22日星期一
据我所知,unix日期格式中没有本机函数,就像在PHP(j)中一样。我如何在unix中实现这一目标?关于日期编号的复杂正则表达式?
答案 0 :(得分:9)
尝试。
#!/bin/sh
DaySuffix() {
case `date +%d` in
1|21|31) echo "st";;
2|22) echo "nd";;
3|23) echo "rd";;
*) echo "th";;
esac
}
date "+%A %d`DaySuffix` %B %Y"
答案 1 :(得分:3)
我在Linux机器上有类似的东西(Ubuntu 8.10)。我不认为它适用于Solaris,我测试的一台机器不允许在%后面使用_字符以避免用0填充字段。非填充允许日期返回1而不是01(01st doesn看起来不错,与第一名相比。
我使用shell函数(再次,你的操作系统或shell版本可能不像我定义函数的方式)命名为DaySuffix,然后将该函数作为日期调用的一部分调用。功能本身相当hacky,我敢肯定有更好的方法来做到这一点但它适用于我。请注意11,12和&的特殊情况。 13 - 你必须爱上英语!
#!/bin/sh
DaySuffix() {
if [ "x`date +%-d | cut -c2`x" = "xx" ]
then
DayNum=`date +%-d`
else
DayNum=`date +%-d | cut -c2`
fi
CheckSpecialCase=`date +%-d`
case $DayNum in
0 )
echo "th" ;;
1 )
if [ "$CheckSpecialCase" = "11" ]
then
echo "th"
else
echo "st"
fi ;;
2 )
if [ "$CheckSpecialCase" = "12" ]
then
echo "th"
else
echo "nd"
fi ;;
3 )
if [ "$CheckSpecialCase" = "13" ]
then
echo "th"
else
echo "rd"
fi ;;
[4-9] )
echo "th" ;;
* )
return 1 ;;
esac
}
# Using consolidated date command from chris_l
# Also using %-d instead of %d so it doesn't pad with 0's
date "+%A %-d`DaySuffix` %B %Y"
答案 2 :(得分:1)
#!/bin/ksh
DateSuffix() {
if [ "$1" -eq "1" ] || [ "$1" -eq "21" ] || [ "$1" -eq "31" ]
then
echo 'st'
elif [ "$1" -eq "2" ] || [ "$1" -eq "22" ]
then
echo 'nd'
elif [ "$1" -eq "3" ] [ "$1" -eq "23" ]
then
echo 'rd'
else
echo 'th'
fi
}
date "+%A %d`DateSuffix` %B %Y"