免费注册 查看新帖 |

Chinaunix

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

如何显示昨天的日期?  关闭 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2006-01-07 19:14 |只看该作者

回复 1楼 lmw921273 的帖子

需要先查一下,自己登陆的机器属于什么时区
$echo $TZ
BEIST-8
说明时区是东8区,计算昨天应该yesterday=`TZ='GMT+16' date +%Y%m%d `
如果
$echo $TZ
CST6CDT
说明时区是西6区,计算昨天应该yesterday=`TZ='GMT+30' date +%Y%m%d `
依次类推。。。。

论坛徽章:
0
22 [报告]
发表于 2006-01-07 21:01 |只看该作者
纵览本贴,小弟觉得佛光普照的较好,不过我在hp下用posix shell环境测试后会有
如下结果2006016.如果是20060106形式,我想更完美点---我是支持posix shell
的阿!

论坛徽章:
0
23 [报告]
发表于 2006-04-01 15:56 |只看该作者

求昨天的日期(绝对可靠)润年2月稍加修改即可

#!/bin/sh
yy=`date +%Y`
mm=`date +%m`
dd=`date +%d-1|bc`
case $mm in
   01|02|04|06|08|09|11)
            [ $dd -lt 1 ] && dd=31;mm=`expr $mm - 1` ;;
   03)
            [ $dd -lt 1 ] && dd=28;mm=`expr $mm - 1` ;;
   05|07|10|12)
            [ $dd -lt 1 ] && dd=30;mm=`expr $mm - 1` ;;
esac
yesterday=`cal $mm $yy`
dd=`echo $yesterday|awk '{printf $NF}'`
echo "$yy-$mm-$dd"
wayy2008 该用户已被删除
24 [报告]
发表于 2006-04-01 21:05 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
25 [报告]
发表于 2006-04-01 23:19 |只看该作者
SHELL计算时间要麻烦一些,比如100天前的时间是多少;
对于计算时间,不妨换一个思路,用C写大概也就是二三十行代码,编译后用SHELL调用
灵活性通用性都很好,写法也很简单:
就是施用tm结构和time_t使用mktime转换一下,用time_t计算localtime转换
然后就是按照要求打印;差不多就是20~30行代码吧.

[ 本帖最后由 hkwang66 于 2006-4-1 23:23 编辑 ]

论坛徽章:
0
26 [报告]
发表于 2006-04-01 23:34 |只看该作者

看看我的方法

[quote]原帖由 [i]lmw921273[/i] 于 2003-1-16 12:38 发表
我想使用shell 编程实现输出昨日日期变量。

如机器时间为 2003年2月1日,取得变量为 20030131 。 [/quote]


问题:linux下获得前249200秒得具体日期和时间?  

freebsd下获得某天的时间日期的办法
1:先把当前的日期转化为秒(从1970年1月1日算起)
current=date + %s
2:如果获得3天前的日期,把3天转换为秒:3x24x3600=259200
计算:echo `expr 3 \* 24 \* 3600`
3:用current-259200获得一个数值,比如:10111115514
4:date -r 10111115514就可以获得3天前的日期了。
在linux下怎么整?-r参数不好用了。
自问自答:
linux下比较繁琐:
上回不是获得秒了吗?10111115514
可以这样:
date -d "1970-01-01 UTC 10111115514 seconds"

上面这个方法比较下面这个,就简单多了,下面这个是用数学的方法计算的(纯shell程序),在测试机上测试通过:
#!/bin/sh
# ydate: A Bourne shell script that
# prints yestarday's date
# Output form: Month Day Year
# 获得当前日期的的月、日和年.
month=`date +%m`
day=`date +%d`
year=`date +%Y`
# 将月转化为整数
month=`expr $month + 0`
# 将获得的日减1.
day=`expr $day - 1`
#如果$day的值为0,意外着前一天应该是上个月的最后一天。
if [ $day -eq 0 ]; then
month=`expr $month - 1`
#如果$month的值为0,意味着上个月是前一年的12月31日
if [ $month -eq 0 ]; then
month=12
day=31
year=`expr $year - 1`
#如果month不为0,找出这个月的前一天
else
case $month in
1|3|5|7|8|10|12) day=31;;
4|6|9|11) day=30;;
2)
if [ `expr $year % 4` -eq 0 ]; then
if [ `expr $year % 400` -eq 0 ]; then
day=29
elif [ `expr $year % 100` -eq 0 ]; then
day=28
else
day=29
fi
else
day=28
fi
;;
esac
fi
fi
# 打印出来.
echo $month $day $year
exit 0

qq:83096146

[[i] 本帖最后由 liu1084 于 2006-4-1 23:36 编辑 [/i]]

论坛徽章:
0
27 [报告]
发表于 2006-04-01 23:42 |只看该作者
C写然后用SHELL调用比如C写编译后叫timefunc 传入n表示输出的是n天以前的时间,输出YYYYMMDD格式:
和其他命令调用形式一样;
yesterday=`timefunc 1`

yestterday这个变量中存放的就是你想要的时间

论坛徽章:
0
28 [报告]
发表于 2006-04-04 17:41 |只看该作者
date -d yesterday +%C%y%m%d

论坛徽章:
0
29 [报告]
发表于 2006-06-15 11:28 |只看该作者
记号

论坛徽章:
0
30 [报告]
发表于 2006-06-20 11:06 |只看该作者
echo |gawk ' {print strftime("%Y%m%d" ,systime()-86400*4) ;exit }'
這樣如何
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP