Chinaunix
标题:
给出任意的日期,求得给出的日期是周几
[打印本页]
作者:
zglcl008
时间:
2004-10-08 14:35
标题:
给出任意的日期,求得给出的日期是周几
老长时间没发贴了,抛块半头砖
首先,日期格式的判断,日期的长度和数字字符等。
数字字符的判断可以用awk的match字符函数,但实验时有副作用。
只好用程序中的笨方法。
其次,就是求日期是周几,利用cal的结果过滤后求得。
最后,屏幕显示所得的结果。
#!/bin/sh
if [ $# -ne 1 ]
then
echo "usage: $0 date(date of source data)";
exit -1;
fi
DATA_DATE="$1"
FMT_CODE=`echo $DATA_DATE|awk '{
date_len = length($1)
if (date_len !=
{
fmt_flag = 1
} else {
fmt_flag=0
for (cnt=1; cnt<date_len+1; cnt++) {
date_number=substr($1,cnt,1)
if ( date_number<"0" ||
date_number>"9"
{
fmt_flag=2
break
}
}
}
print fmt_flag
}'`;
if [ $FMT_CODE -ne 0 ]
then
echo "---- Date format error [$FMT_CODE] ";
exit -2;
else
echo "---- Date [$DATA_DATE] format ok [$FMT_CODE] ";
fi
Year=`echo $DATA_DATE|awk '{print substr($1,0,4)}'`
Month=`echo $DATA_DATE|awk '{print substr($1,5,2)}' | sed 's/^0//'`
Day=`echo $DATA_DATE|awk '{print substr($1,7,2)}' | sed 's/^0//'`
Week=`cal -m $Month $Year | grep " $Day" |
sed "s/${Day}.*$/${Day}\ /" |awk -F'|' '{
print length($1)/3
}'`;
###
echo "--debug-- [$DATA_DATE] --- [$Week] !!!"
###
case $Week in
1)
echo "---- 1 Mon. Monday"
;;
2)
echo "---- 2 Tues. Tuesday"
;;
3)
echo "---- 3 Wed. Wednesday"
;;
4)
echo "---- 4 Thurs. Thursday"
;;
5)
echo "---- 5 Fri. Friday"
;;
6)
echo "---- 6 Sat. Saturday"
;;
7)
echo "---- 7 Sun. Sunday"
;;
*)
echo "---- ERROR!!!"
;;
esac
exit 0;
作者:
zglcl008
时间:
2004-10-08 14:37
标题:
给出任意的日期,求得给出的日期是周几
咦,格式怎么乱了-再发一次
#!/bin/sh
if [ $# -ne 1 ]
then
echo "usage: $0 date(date of source data)";
exit -1;
fi
DATA_DATE="$1"
FMT_CODE=`echo $DATA_DATE|awk '{
date_len = length($1)
if (date_len !=
{
fmt_flag = 1
} else {
fmt_flag=0
for (cnt=1; cnt<date_len+1; cnt++) {
date_number=substr($1,cnt,1)
if ( date_number<"0" ||
date_number>"9"
{
fmt_flag=2
break
}
}
}
print fmt_flag
}'`;
if [ $FMT_CODE -ne 0 ]
then
echo "---- Date format error [$FMT_CODE] ";
exit -2;
else
echo "---- Date [$DATA_DATE] format ok [$FMT_CODE] ";
fi
Year=`echo $DATA_DATE|awk '{print substr($1,0,4)}'`
Month=`echo $DATA_DATE|awk '{print substr($1,5,2)}' | sed 's/^0//'`
Day=`echo $DATA_DATE|awk '{print substr($1,7,2)}' | sed 's/^0//'`
Week=`cal -m $Month $Year | grep " $Day" |
sed "s/${Day}.*$/${Day}\ /" |awk -F'|' '{
print length($1)/3
}'`;
###
echo "--debug-- [$DATA_DATE] --- [$Week] !!!"
###
case $Week in
1)
echo "---- 1 Mon. Monday"
;;
2)
echo "---- 2 Tues. Tuesday"
;;
3)
echo "---- 3 Wed. Wednesday"
;;
4)
echo "---- 4 Thurs. Thursday"
;;
5)
echo "---- 5 Fri. Friday"
;;
6)
echo "---- 6 Sat. Saturday"
;;
7)
echo "---- 7 Sun. Sunday"
;;
*)
echo "---- ERROR!!!"
;;
esac
exit 0;
作者:
zglcl008
时间:
2004-10-08 14:40
标题:
给出任意的日期,求得给出的日期是周几
if (date_len !=
{
怎么成圆脸了,判断的是长度8
作者:
網中人
时间:
2004-10-08 15:57
标题:
给出任意的日期,求得给出的日期是周几
若用 gnu date 的話, try:
date -d "2004-01-01" +%w
作者:
aspbiz
时间:
2004-10-08 16:04
标题:
给出任意的日期,求得给出的日期是周几
是呀,不是有现成的命令吗?
写什么脚本。
作者:
小鹭
时间:
2004-10-08 19:19
标题:
给出任意的日期,求得给出的日期是周几
#!/bin/sh
month=`echo $1|awk -F- '{print $2}'`
year=`echo $1|awk -F- '{print $1}'`
date=`echo $1|awk -F- '{print $3}'|sed 's/^0/ /g'`
rm -rf 1.tmp
cal $month $year|tail +2|grep "$date"|tr ' ' '\n'>1.tmp
week=`cat -n 1.tmp |grep $date|awk '{print $1}'`
case $week in
1) echo "Sunday"
;;
2) echo "Monday"
;;
3) echo "Tuesday"
;;
4) echo "Wednesday"
;;
5) echo "Thursday"
;;
6) echo "Friday"
;;
7) echo "Satday"
;;
esac
rm -rf 1.tmp
复制代码
作者:
zglcl008
时间:
2004-10-09 10:55
标题:
给出任意的日期,求得给出的日期是周几
小鹭:
您好
您的代码中的两个核心语句好像都有问题,让我们来验证一下。
毕竟技术的东西是比较严谨的。我们探讨一下吧。
我的代码是经过验证的。
第一句的执行如下:
cal $month $year|tail +2|grep "$date"|tr ' ' '\n'>1.tmp
[
$ cal 8 2004|tail +2|grep 8|tr ' ' '\n'
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
]
第二句:
week=`cat -n 1.tmp |grep $date|awk '{print $1}'`
在上一句错的情况下,这里根本得不到结果。
斑竹--網中人的方法中提到的是用 gnu date 的方法
使用简单有效,只要在脚本中加上日期格式的验证就可以了。
date -d "2004-01-01" +%w
%w day of week (0..6); 0 represents Sunday
%W week number of year with Monday as first day of week (00..53)
作者:
小鹭
时间:
2004-10-09 13:02
标题:
给出任意的日期,求得给出的日期是周几
对不起,一时倏忽. 我写的代码有问题.
用 gnu date 效率最高
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2