bash中的日期格式 - 案例

时间:2016-11-15 10:50:31

标签: bash date

我需要在bash中收到一个代码,它会以这种格式提供当前日期:

Sunday, 1^st January 2016(上标为stndrdth)。

接收上标的方式是什么?

我会感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

=LEFT(A1,FIND("/",A1)-1)&RIGHT(A1,FIND("/",A1,FIND("/",A1)+1)) 程序没有任何产生序号的转换,因此您需要在其后面替换后缀:

date

请注意,大多数英语风格指南建议不要将序数后缀写为上标;如果你真的坚持它,你可以把它当作一种练习!

另请注意,通过两次调用#!/bin/bash d=$(date +%e) case $d in 1?) d=${d}th ;; *1) d=${d}st ;; *2) d=${d}nd ;; *3) d=${d}rd ;; *) d=${d}th ;; esac date "+%A, $d %B %Y" ,我们可能会在午夜冒险。我们可以通过单独查找当前时间然后格式化它来避免这种情况:

date

或者,将日期(一次)读入单独的变量,然后在shell中格式化它们:

#!/bin/bash

s=$(date +@%s)
d=$(date -d $s +%e)

case $d in
    1?) d=${d}th ;;
    *1) d=${d}st ;;
    *2) d=${d}nd ;;
    *3) d=${d}rd ;;
    *)  d=${d}th ;;
esac

date -d $s "+%A, $d %B %Y"

答案 1 :(得分:0)

我希望这会有所帮助:

#!/bin/bash

# get the day of the month to decide which postfix should be used
dayOfMonth=$(date +%d)

# Choose postfix
case "$dayOfMonth" in
    1)
    postfix="st"
    ;;
    2)
    postfix="nd"
    ;;
    3)
    postfix="rd"
    ;;
    *)
    postfix="th"
    ;;
esac

# Generate date string
myDate=$(date +%A,\%d\^$postfix\ %B\ %Y)
echo $myDate

<强>解释

  1. 记住评论。

  2. 日期命令输出可以从命令行格式化,字符串以“+”开头,包含varius格式选项,例如%d表示每月的某一天。

  3. 在终端输入:

    男人约会

    获取手册并检查FORMAT部分。

    或者如果你想在午夜时分运行你的应用程序,就像Toby Speight警告的那样。只打电话约会一次:

    #!/bin/bash
    
    # Generate date template
    dateTpl=$(date +%A,\ \%d\^postfix\ %B\ %Y)
    # get the day of the month from the template, to decide which postfix should be use
    dayOfMonth=$(echo $dateTpl | cut -d ' ' -f 2 | sed 's/\^postfix//g' )
    
    # Choose postfix
    case "$dayOfMonth" in
        1)
        postfix="st"
        ;;
        2)
        postfix="nd"
        ;;
        3)
        postfix="rd"
        ;;
        *)
        postfix="th"
        ;;
    esac
    
    # Generate date string from template
    myDate=$(echo $dateTpl | sed "s/postfix/$postfix/g")
    echo $myDate