正则表达式 – 在unix中格式化日期以在日期包含后缀(st,nd,rd和th)

如何在unix日期的日期编号上添加后缀?

我会解释一下.我有一个TextMate包snippit,写出今天的日期.它使用unix日期和格式.这是代码:

`date +%A` `date +%d` `date +%B` `date +%Y`

它输出:

2010年3月22日星期一

我想将后缀添加到当天(st,nd,rd和th),如下所示:

2010年3月22日星期一

据我所知,unix日期格式中没有本机函数,就像在PHP(j)中一样.我如何在unix中实现这一目标?一天复杂的正则表达式?

我在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"
相关文章
相关标签/搜索