当前位置:Linux教程 - Shell - shell - 如何计算一个日期是星期几

shell - 如何计算一个日期是星期几

如何计算一个日期是星期几
2004-04-23 15:18 pm
来自:Linux文档
现载:Www.8s8s.coM
地址:无名

本来有这样的一个讨论的帖子,不小心被俺删掉了.觉得有些可惜,便写了一个贴上来.

#!/bin/ksh
getdayofweek()
{
# Function dayofweek
# Sample input:20020703

# Extract the month, day, and year
year=`echo $1|cut -c1-4`
month=`echo $1|cut -c5-6`
day0=`echo $1|cut -c7-8`
day=${day0#0}


# Get the calendar line for the specified day of the month/year
dline=`cal $month $year | sed 's// X /g; s/^/ /; s/$/ /' | grep " $day "`

# Compute the day of the week
IFS='
'
set $dline
dow=1 for weekday do
if [[ $day = $weekday ]]
then
break
else
(( dow = dow+1 ))
fi
done

# Convert the numeric day of the week to a string
case $dow in
1) print Sun ;;
2) print Mon ;;
3) print Tue ;;
4) print Wed ;;
5) print Thu ;;
6) print Fri ;;
7) print Sat ;;
*) print "wrong date" ;;
esac
}



这样就可以了
$ date -d "2002/08/13" "+%a"



运行不过呀!


斑竹的帖子确实有些问题。
dline=`cal $month $year | sed 's// X /g; s/^/ /; s/$/ /' | grep " $day "`
一行中的sed 参数有问题。

是这样的,我对sed不是特别熟悉,可能是引号内有些问题吧


我是测试过的呀.



用它试试!
get_whatdays()
{
year=`expr substr $1 1 4`
month=`expr substr $1 5 2`
day=`expr substr $1 7 2`
b=`cal $month $year|wc -l`
b=`expr $b - 1`
a=`cal $month $year |awk -v day=$day -v jl=$b '{for i=1;i<=NF;i++){if($i==day){if (NR==$i){print $i-1}else{print 7-NF+i-1}}}}'`
echo $a
}

{if($i==day){if (NR==$i){print $i-1}else{print 7-NF+i-1}}}}'`?
测试过么?
$i ----> i
if ( i==day){if (NR==i){print i-1}..........


我用过,没有问题.

你贴出来的程序,for后少了一个(.
且程序计算20020101时结果正确,计算20020103便出错了.

噢!对不起,我没有试过这个时间段。
真不好意思!!


get_whatdays()
{
year=`expr substr $1 1 4`
month=`expr substr $1 5 2`
day=`expr substr $1 7 2`
b=`cal $month $year|wc -l`
b=`expr $b - 1`
a=`cal $month $year |awk -v day=$day -v jl=$b '{for i=1;i<=NF;i++){if($i==day){if (NR==jl){print $i-1}else{print 7-NF+i-1}}}}'`
echo $a
}
老斑,现在试试?


得,又少了一个括号。


我测试可以了,又安照偶的习惯改了一个valentine版.
get_whatdays()
{
year=`echo $1|cut -c1-4`
month=`echo $1|cut -c5-6`
day=`echo $1|cut -c7-8`

b=`cal $month $year|wc -l `
cal $month $year |awk '{for(i=1;i<=NF;i++){if($i=='$day'){if (NR=='"$b"'-1
){print i-1}else{print 7-NF+i-1}}}}'
}


斑竹,
if (NR=='"$b"'-1
){print $i-1}
应该是
if (NR=='"$b"'-1
){print i-1}

编辑  发贴时间2002/08/21 11:19am 此 IP 为代理服务器IP: 已设置保密
该用户目前不在线 valentine
 帅哥 此人为版主
头衔: 论坛版主



级别: 天使
魅力: 13074
经验: 11018
金钱: 28769 幽妮石
来自: 山东 
总发贴数: 1471 篇
注册日期: 2002/03/01
消息 查看 搜索 好友 邮件 复制 引用 回复贴子回复 

$i是指第i个字段的值
i是指i的值.
按照原程序,应该是$i.

对啊,
函数返回值应该是0-6
如果用$i-1,返回值超出0-6
我用20020825测试了,返回值是24(25-1)
应该是0(1-1)

那应该是你说的对.我把它改过来.