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)
那应该是你说的对.我把它改过来.