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

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

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

#!/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)

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航