免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4050 | 回复: 21
打印 上一主题 下一主题

还是日期计算!! [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-19 15:14 |只看该作者 |倒序浏览
谁能说说到底改怎么算,我得要求不高是一台
SunOS 5.8
我估计可能不会是GNU date
可能是POSIX的,也可能更原始
看了man page没找到关于日期回溯调整的参数
我现在要求不高,就要能算出前一天的日期就行
但是因为是用在跨月份的那一天,所以不是简单的+1 -1就行了
一定是准确的日期
我希望最好别用脚本,大家有啥办法么

论坛徽章:
0
2 [报告]
发表于 2003-05-19 16:33 |只看该作者

还是日期计算!!

不用SCRIPT 好像。。有点问题。。。

论坛徽章:
0
3 [报告]
发表于 2003-05-19 16:46 |只看该作者

还是日期计算!!

#!/opt/perl5/bin/perl

use POSIX;

$time_today=localtime(time);
@time_today=localtime(time);
print "Today Date =  $time_today\n";
print "@time_today\n";

$time_today[3]--;

$time_yesterday=localtime(POSIX::mktime (@time_today));
@time_yesterday=localtime(POSIX::mktime (@time_today));
print "Yesterday Date =  $time_yesterday\n";
print "@time_yesterday\n";

论坛徽章:
0
4 [报告]
发表于 2003-05-19 18:48 |只看该作者

还是日期计算!!

javalee//home/javalee/lx>date --date=yesterday;date --date=today;date --date=tomorrow
日  5月 18 18:48:38 CST 2003
一  5月 19 18:48:38 CST 2003
二  5月 20 18:48:38 CST 2003

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-05-19 19:08 |只看该作者

还是日期计算!!

      
疯了,SunOS不支持上面这个命令
那个脚本不知道行不行,没敢试

论坛徽章:
0
6 [报告]
发表于 2003-05-19 20:31 |只看该作者

还是日期计算!!

原帖由 "quakelee" 发表:
...
我现在要求不高,就要能算出前一天的日期就行
但是因为是用在跨月份的那一天,所以不是简单的+1 -1就行了
一定是准确的日期
我希望最好别用脚本...


是啊,要求不是很高,但是却很刁,SunOS 的 date 命令行不提供此功能,又不让用脚本,那怎么办?

好吧,不用脚本就不用脚本。


方法一、自己编译一下


  1. #include <stdio.h>
  2. #include <time.h>

  3. int main()
  4. {
  5.        time_t     today;
  6.        struct tm  yesterday;
  7.        time(&today);
  8.        today = today - 86400;
  9.        yesterday = *localtime(&today);
  10.        yesterday.tm_mon ++;
  11.        printf("%02d %02d\n", yesterday.tm_mon, yesterday.tm_mday);
  12.       return(0);
  13. }

复制代码



方法二、可以设定一下 $TZ ,让时区的 offset 为 -86400 ,不过我现在没法试,而且不建议用这个方法,因为对其它程序可能会有意想不到的后果。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2003-05-19 20:36 |只看该作者

还是日期计算!!

靠,算了用脚本就用脚本吧,红袖jj教教我用脚本怎么弄
因为是用在跨月的时候,就是每个月一号
所以前一天的日期一定要算的准,算错了我可死了
况且我是要符合%Y%m%d的格式

论坛徽章:
0
8 [报告]
发表于 2003-05-19 20:45 |只看该作者

还是日期计算!!

原帖由 "quakelee" 发表:
靠,算了用脚本就用脚本吧,红袖jj教教我用脚本怎么弄
因为是用在跨月的时候,就是每个月一号
所以前一天的日期一定要算的准,算错了我可死了
况且我是要符合%Y%m%d的格式


我现在马上要走了,没时间了。

你可以找一下旧帖,以前 nkliyong 写过一套关于日期的函数,也包括你要的“前一天”问题,你可以拿来用。如果还搞不定的的话,回头我再回复。

88

论坛徽章:
0
9 [报告]
发表于 2003-05-20 00:59 |只看该作者

还是日期计算!!

也不知道你弄好了没有?

因为你实际上要求的是上个月的最后一天,比较偷懒而且在Solaris上可行的方法可以这样。

  1. #!/bin/sh
  2. if [ $# -ne 0 ]; then
  3.     DateString=$1
  4.     Year=`echo $DateString | cut -b 1-4`
  5.     Month=`echo $DateString | cut -b 5-6`
  6. else
  7.     Year=`date +%Y`
  8.     Month=`date +%m`
  9. fi

  10. if [ $Month -eq 1 ]; then
  11.     Month=12
  12.     Year=`expr $Year - 1`
  13. else
  14.     Month=`expr $Month - 1`
  15. fi

  16. Cal=`cal $Month $Year`
  17. Yesterday=`echo $Cal | awk '{print $NF}'`
  18. echo "$Year/$Month/$Yesterday"
复制代码


假设上面的脚本叫 a.sh 运行:

./a.sh  [200302]

无参数时,默认为当前月份

论坛徽章:
0
10 [报告]
发表于 2003-05-20 01:11 |只看该作者

还是日期计算!!

...

楼上的帖子运行结果为

sleeve@magic:~/test[586]$ a.sh
2003/4/30

sleeve@magic:~/test[587]$ a.sh 190003
1900/2/28

sleeve@magic:~/test[588]$ a.sh 200003
2000/2/29

sleeve@magic:~/test[589]$ a.sh 200403
2004/2/29

sleeve@magic:~/test[590]$ a.sh 210003
2100/2/28

sleeve@magic:~/test[591]$ a.sh 200301
2002/12/31
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP