Chinaunix

标题: 如何计算一个日期是星期几? [打印本页]

作者: valentine    时间: 2002-08-11 15:16
标题: 如何计算一个日期是星期几?
[这个贴子最后由valentine在 2002/08/11 03:17pm 编辑]

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

#!/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&#59; s/^/ /&#59; 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 &#59;&#59;
        2) print Mon &#59;&#59;
        3) print Tue &#59;&#59;
        4) print Wed &#59;&#59;
        5) print Thu &#59;&#59;
        6) print Fri &#59;&#59;
        7) print Sat &#59;&#59;
        *) print "wrong date" &#59;&#59;
    esac
}


作者: valentine    时间: 2002-08-12 10:11
标题: 如何计算一个日期是星期几?
up
作者: sham    时间: 2002-08-14 01:16
标题: 如何计算一个日期是星期几?
这样就可以了
$ date -d "2002/08/13" "+%a"
作者: nortell    时间: 2002-08-14 10:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: cpss    时间: 2002-08-14 11:24
标题: 如何计算一个日期是星期几?
斑竹的帖子确实有些问题。
dline=`cal $month $year | sed 's// X /g&#59; s/^/ /&#59; s/$/ /' | grep " $day "`
一行中的sed 参数有问题。
作者: menghan    时间: 2002-08-14 11:46
标题: 如何计算一个日期是星期几?
是这样的,我对sed不是特别熟悉,可能是引号内有些问题吧

作者: valentine    时间: 2002-08-14 17:18
标题: 如何计算一个日期是星期几?
我是测试过的呀.
作者: yuzengbao    时间: 2002-08-15 00:00
标题: 如何计算一个日期是星期几?
用它试试!
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&#59;i<=NF&#59;i++){if($i==day){if (NR==$i){print $i-1}else{print 7-NF+i-1}}}}'`
echo $a
}  



作者: valentine    时间: 2002-08-18 21:30
标题: 如何计算一个日期是星期几?
{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}..........
作者: yuzengbao    时间: 2002-08-18 22:22
标题: 如何计算一个日期是星期几?
我用过,没有问题.
作者: valentine    时间: 2002-08-19 08:24
标题: 如何计算一个日期是星期几?
你贴出来的程序,for后少了一个(.
且程序计算20020101时结果正确,计算20020103便出错了.
作者: yuzengbao    时间: 2002-08-19 22:57
标题: 如何计算一个日期是星期几?
噢!对不起,我没有试过这个时间段。
真不好意思!!
作者: valentine    时间: 2002-08-20 08:27
标题: 如何计算一个日期是星期几?
可以再修改一下啊.
作者: yuzengbao    时间: 2002-08-20 22:38
标题: 如何计算一个日期是星期几?
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&#59;i<=NF&#59;i++){if($i==day){if (NR==jl){print $i-1}else{print 7-NF+i-1}}}}'`
echo $a
}  
老斑,现在试试?


  
作者: yuzengbao    时间: 2002-08-20 22:38
标题: 如何计算一个日期是星期几?
得,又少了一个括号。
作者: valentine    时间: 2002-08-21 08:51
标题: 如何计算一个日期是星期几?
[这个贴子最后由valentine在 2002/08/21 12:03pm 编辑]

我测试可以了,又安照偶的习惯改了一个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&#59;i<=NF&#59;i++){if($i=='$day'){if (NR=='&quot;$b&quot;'-1
){print i-1}else{print 7-NF+i-1}}}}'
}

作者: hwhcom    时间: 2002-08-21 11:19
标题: 如何计算一个日期是星期几?
斑竹,
if (NR=='&quot;$b&quot;'-1
){print $i-1}
应该是
if (NR=='&quot;$b&quot;'-1
){print i-1}
作者: valentine    时间: 2002-08-21 11:25
标题: 如何计算一个日期是星期几?
$i是指第i个字段的值
i是指i的值.
按照原程序,应该是$i.
作者: hwhcom    时间: 2002-08-21 11:36
标题: 如何计算一个日期是星期几?
对啊,
函数返回值应该是0-6
如果用$i-1,返回值超出0-6
我用20020825测试了,返回值是24(25-1)
应该是0(1-1)

作者: valentine    时间: 2002-08-21 12:02
标题: 如何计算一个日期是星期几?
那应该是你说的对.我把它改过来.
作者: yuzengbao    时间: 2002-08-23 23:14
标题: 如何计算一个日期是星期几?
高手就是高手,就是不一样的感觉!!
作者: jeams    时间: 2003-03-27 07:51
标题: 如何计算一个日期是星期几?
date --date='20030328' +%a
返回和语言相对应的值,如果是中文,就是一二三四五等。
作者: nkliyong    时间: 2003-03-27 09:11
标题: 如何计算一个日期是星期几?
get_whatdays()
{
yy=`echo $1|cut -c 1-4`
mm=`echo $1|cut -c 5-6`
dd=`echo $1|cut -c 7-8`
expr $dd : 0. > /dev/null &amp;&amp; dd=`echo $dd|cut -c 2-2`
aaa=`eval cal $mm $yy|grep " 20 "|cut -c 1-2`
dd=`expr $dd - $aaa \% 7`
[ $dd -lt 0 ] &amp;&amp; dd=`expr $dd + 7`
echo $dd
}
作者: nkliyong    时间: 2003-03-27 09:12
标题: 如何计算一个日期是星期几?
date --date='20030328' +%a 是什么用法?
作者: nkliyong    时间: 2003-03-27 09:15
标题: 如何计算一个日期是星期几?
get_whatdays()
{
yy=`echo $1|cut -c 1-4`
mm=`echo $1|cut -c 5-6`
dd=`echo $1|cut -c 7-8`
expr $dd : 0. > /dev/null &amp;&amp; dd=`echo $dd|cut -c 2-2`
aaa=`eval cal $mm $yy|grep " 20 "|cut -c 1-2`
dd=`expr \( $dd - $aaa \) \% 7`
[ $dd -lt 0 ] &amp;&amp; dd=`expr $dd + 7`
echo $dd
}

复制都能搞错,偶也真够春的
作者: ohwww    时间: 2003-06-19 11:34
标题: 如何计算一个日期是星期几?
原帖由 "valentine"]最后由valentine在 2002/08/21 12:03pm 编辑 发表:


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

b=`cal $month $..........
   

用print是不是函数就没有返回值了???要让函数有返还值,必须用echo嘛?
作者: gny31306    时间: 2006-12-23 23:34
原帖由 sham 于 2002-8-14 01:16 发表
这样就可以了
$ date -d "2002/08/13" "+%a"

还是这个命令来的简单
作者: euler    时间: 2007-01-27 15:03
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2