gpt4 book ai didi

regex - 在Unix中格式化日期以包括日期(st,nd,rd和th)的后缀

转载 作者:行者123 更新时间:2023-12-04 05:35:09 36 4
gpt4 key购买 nike

如何在Unix日期的天数上添加后缀?

我会解释。我有一个TextMate捆绑代码段,可以写出今天的日期。它使用Unix日期和格式。这是代码:

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

它输出:

2010年3月22日星期一

我想在当天添加后缀( st rd th ),如下所示:

2010年3月22日,星期一

据我所知,Unix日期格式中没有 native 函数,就像PHP(j)中那样。我将如何在Unix中实现这一目标?日号上的复杂正则表达式?

最佳答案

我在Linux机器(Ubuntu 8.10)上也有类似的工作。我认为它不适用于Solaris,我测试过的一台机器不允许在%之后使用_字符,以避免用0填充该字段。非填充允许日期返回1而不是01(01st不会与1st看上去不正确)。

我使用一个名为DaySuffix的Shell函数(同样,您的OS或Shell版本可能不喜欢我定义该函数的方式),然后将该函数作为date调用的一部分进行调用。该func本身很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"

关于regex - 在Unix中格式化日期以包括日期(st,nd,rd和th)的后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2495459/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com