免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hail
打印 上一主题 下一主题

求N分钟之前的时间改进版,欢迎继续拍砖 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-09-05 17:26 |只看该作者
唉,很难么? 非要手工计算吗?

在solaris和aix编译C语言一行命令就搞定吧,还是内建的编译器。


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

  4. int main(int argc, char** argv)
  5. {
  6.   int Change_time=120;
  7.   if(argc==2)
  8.     Change_time=strtol(argv[1],NULL,10);

  9.   char buf[12];
  10.   time_t t=time(NULL)-Change_time*60;
  11.   struct tm* m=localtime(&t);
  12.   strftime(buf,11,"%m%d %H:%M",m);
  13.   
  14.   printf("The %d minutes ago is %s\n",Change_time,buf);
  15.   return 0;
  16. };

复制代码

[ 本帖最后由 doctorjxd 于 2007-9-5 17:30 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2007-09-05 17:28 |只看该作者
IRIX我倒是在超算中心接触过。
编译C语言程序也很简单呀

论坛徽章:
0
13 [报告]
发表于 2007-09-05 17:35 |只看该作者
原帖由 doctorjxd 于 2007-9-5 17:28 发表
IRIX我倒是在超算中心接触过。
编译C语言程序也很简单呀


AIX下的官方C编译器是要钱的
aix和solaris默认都是没有带c编译器的。
除了自己安装gcc

论坛徽章:
0
14 [报告]
发表于 2007-09-05 17:44 |只看该作者
原帖由 hail 于 2007-9-5 17:35 发表


AIX下的官方C编译器是要钱的
aix和solaris默认都是没有带c编译器的。
除了自己安装gcc


原来如此。
看来我是免费的用习惯了。
还是比较喜欢FreeBSD。

论坛徽章:
0
15 [报告]
发表于 2007-09-06 10:54 |只看该作者
改进版,欢迎继续拍砖
#!/usr/bin/sh
#set -x
ago_day()
{
str=$1
days=$2
yy=`echo $str|cut -c 1-4`
mm=`echo $str|cut -c 5-6`
dd=`echo $str|cut -c 7-8`
sav_dd=$days
days=`expr $days - $dd`
while [ $days -ge 0 ]
do
        mm=`expr $mm - 1`
        [ $mm -eq 0 ] && mm=12 && yy=`expr $yy - 1`
        aaa=`cal $mm $yy`
        bbb=`echo $aaa|awk '{print $NF}'`
        days=`expr $days - $bbb`
done
dd=`expr 0 - $days`
expr $dd : "^.$" > /dev/null && dd=0$dd
expr $mm : "^.$" > /dev/null && mm=0$mm
echo $yy$mm$dd
}
Change_time=${1:-120} #120分钟即2小时之前
V_Day=`date +%Y%m%d`
V_Hour=`date +%H`
V_Min=`date +%M`
V_Time=`expr $V_Hour \* 60 + $V_Min `
if [ $V_Time -lt $Change_time ];
then
   Day=`expr $Change_time / 1440 `
   V_Day=`ago_day $V_Day $Day`
   while [ $V_Time -le $Change_time ]
   do   
     V_Time=`expr 1440 + $V_Time`  
   done                     
fi
V_Time=`expr $V_Time - $Change_time `
N_Hour=`expr $V_Time / 60 `
N_Hour=`printf "%02d\n" $N_Hour`
N_Min=`expr $V_Time % 60 `
N_Min=`printf "%02d\n" $N_Min`

echo "the $Change_time minute ago is $V_Day $N_HourN_Min "

论坛徽章:
0
16 [报告]
发表于 2007-09-06 11:05 |只看该作者
date
20070906  10:59:20
./test.sh 100
the 100 minute ago is 20070906 09:19
./test.sh 1000
the 1000 minute ago is 20070906 18:19
./test.sh 10000
the 10000 minute ago is 20070831 12:19
./test.sh 1440
the 1440 minute ago is 20070905 10:59

论坛徽章:
0
17 [报告]
发表于 2007-09-19 16:06 |只看该作者
首先,非常感谢楼主~
其次,发现一个bug。

>date
Wed Sep 19 00:58:44 PDT 2007
>./test.sh 60
the 60 minute ago is 20070919 23:58

要是都完美了,楼主可是帮了大忙了~~~

thanks again

论坛徽章:
0
18 [报告]
发表于 2007-12-04 17:49 |只看该作者
发现bug
$date +"%Y.%m.%d %T"
2007.12.04 17:46:24
$./test.sh 1100
the 1100 minute ago is 20071204 23:26

论坛徽章:
0
19 [报告]
发表于 2007-12-04 19:27 |只看该作者
也不知道是否有perl,如果有的话,可以这么做

  1. perl -e '
  2. ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=gmtime(time-分钟数*60);
  3. printf "%02d-%02d-%02d %02d:%02d:%02d UTC\n",$year+1900,$mon+1,$mday,$hour,$min,$sed;
  4. '
复制代码

论坛徽章:
0
20 [报告]
发表于 2007-12-05 10:14 |只看该作者
一般perl都有的吧,用perl很简单的,虽然学perl很难。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP