2015-11-04 52 views
0

是否有方法使用$ date +%u找出某一特定日期的星期几号?我将在预测估计时使用这条线。如何使用日期+%u与给定的一天来查找星期几号

例如:

DOW=Monday 
day_no=`date "$DOW" +%u` # Should output 1 
echo "$DOW is $day_no"  

或者我应该只使用如果或情况的方法:

if [ "$DOW" == "Monday" ] 
then 
    day_no=1 
elif [.....] 
then 
.... 

第一种方法是3行,则如果或情况的方法将是20+线。

我正在使用Bash。

回答

1

如果传递$DOW-d标志,它读取的时间说明进行格式化,它会给你想要的东西:

day_no=$(date -d "$DOW" +%u) 

注意,这将1代星期一,7至周日。

+0

这适用于Linux,但不适用于OSX或FreeBSD。 OP没有提到他的操作系统 - 生成便携式答案很重要。 – ghoti

0

许多方法来实现这一点。

如果你想使用特定于bash的东西,我会建议一个数组。在bash 4,关联数组可以使用这样的:

declare -A days='([Monday]="1" [Tuesday]="2" etc...)' 

DOW="Monday" 

day_no=${days[$DOW]} 

如果在bash 3(在OSX例如)的时候,可能必须通过非关联数组滚动。

declare -a days='([1]="Monday" [2]="Tuesday" etc...)' 

DOW="Monday" 

for _ in "${!days[@]}"; do 
    if [ "${days[$_]}" = "$DOW" ]; then 
    day_no=$_ 
    break 
    fi 
done 

如果你想用date命令来处理这个问题,是要知道你所使用的平台是很重要的,因为date在不同的操作系统具有不同的行为。以下可能为你工作:

case $(uname -s) in 
    Linux)  day_no=$(date -d "$DOW" '+%u') ;; 
    *BSD|Darwin) day_no=$(date -j -f '%A' "$DOW" '+%u') ;; 
    *) 
    echo "ERROR: I don't know how to do this in $(uname -s)." >&2 
    exit 1 
    ;; 
esac 

注意的是,基于阵列的解决方案威力的一个很可能是比需要调用外部程序(date)的解决方案更快。

相关问题