
为什么要用awk呢?
简单的进行时间转换就行了。不超过10行
redhat4环境下:
datesh内容:
flag=$1
time1=`date -d "$flag" +'%Y-%m-%d %H:%M'`
echo $time1
time2=`date -d "$time1" '+%s'`
echo $time2
time3=`expr $time2 + 180`
time4=`date -d "1970-01-01 UTC "$time3" seconds" +"%d-%b-%Y %H:%M"`
echo $time4
time5=`expr $time2 - 180`
time6=`date -d "1970-01-01 UTC "$time5" seconds" +"%d-%b-%Y %H:%M"`
echo $time6
检查结果:
[root@localhost ~]# sh datesh 00:00
2010-09-18 00:00
1284739200
18- 9月-2010 00:03
17- 9月-2010 23:57
[root@localhost ~]# sh datesh 00:12
2010-09-18 00:12
1284739920
18- 9月-2010 00:15
18- 9月-2010 00:09
每次执行结果最后两行就是你要的答案
使用PowerShell获取0时区时间的方法如下:
1 首先,打开PowerShell,输入“Get-Date”命令,查看当前的时间;
2 然后,输入“Get-Date -uFormat %Y-%m-%d %H:%M:%S”命令,可以获取0时区的当前时间;
3 如果想获取其他时区的时间,可以使用“Get-Date -TimeZone 时区”命令,其中时区可以是UTC、GMT或者其他时区的名称;
4 最后,还可以使用“Get-Date -uFormat %Y-%m-%d %H:%M:%S”命令,结合“TimeZone”参数,获取指定时区的时间。
通过shell获取当前8位日期,并赋给变量,并且使用变量作为文件名,建立文件夹
代码如下:
ls_date=`date +%Y%m%d`
mkdir ${ls_date}
上面两句代码虽然简单
但是在应用中比较实用
获取日期注意事项:date +%Y%m%d 这个字符串是被英文状态下的ESC下面那个键
获取变量注意事项:必须有$与{变量名}组成
1、select to_char(trunc(sysdate-1),'yyyymmdd') from dual;
2、select count() from a where create_time between trunc(sysdate-1) and trunc(sysdate);
在linux Shell中并没有毫秒级的时间单位,只有秒和纳秒。所以在shell中可以获取秒级时间戳,但是不能获取毫秒级时间戳。
有时候确实需要毫秒级时间戳,于是使用秒和纳秒的时间戳来组合一下。通常我们看到的都是如下写法:
这个方法你快速地反复去执行,大概五六次就会出现一次报错 value too great for base 。
date '+%N' 获取纳秒时获取的是一个字符串,而不是数字,且为了保证九位数,前面会补0,例如 073526864 。遇到首字母为0的字符串,shell正常的除法不能自动将其转换为数字(是的,虽然你看不到有数据类型,但是他是分数字和字符串类型的,并且使用的时候一般都隐含了类型转换,lua也有这个问题,被坑过无数次)。
使用 expr命令 。
需要注意的是乘法符号 需要写成 \ ,不然无法识别为乘法符号。
date命令在shell脚本中用处很大,比如要在脚本中标记一个日志或者针对某个文件做更改,就可以使用date给它做一些装饰,比如每天备份mysql,最终生成一个sql的文件,那么我们就可以针对这个文件加一个日期的标记,这样就可以很清晰的知道我们备份的这个文件是哪一天生成的或者周几生成的,等到下一个对应的周几,此时备份的sql文件就会自动地将上一个周同一天的备份文件覆盖掉,这样就不用删除文件
1、date
# date //显示系统当前日期和时间
上面是date命令默认的输出格式,我们也可以将输出格式显示为英文
# LANG=en //将系统环境变量LANG设置为英文格式
# date //然后执行date命令,结果如下
2、年月日
我们标记日期的方式一般的格式是:20180321 、 180321
# date +%Y //year,输出4位数年
# date +%y //输出2位数的年
# date +%m //m表示month,输出的结果是月份
# date +%d //d表示day,日
# date +%D //D表示特殊格式的日期表示方法,如下当前日期为2018年3月21日
我们还可以将上面的年月日组合在一起输出
# date +%Y%m%d //输出年月日
# date +%F //输出的年月日会用连字符隔开
3、时分秒
# date +%H //H表示hour小时
# date +%M //M表示minute分钟
# date +%S //S表示second秒
# date +%s //输出结果是一个时间戳,表示距离1970年1月1日0时0分过去多少秒
# date +%T //以下面格式输出时分秒
# date +%H:%M:%S //效果跟上条命令一样
4、星期
# date +%w //输出结果为星期几,比如下图表示当前系统时间是星期三
# date +%W //表示当前为今年的第几周,比如我这里为今年的第12周
5、日历
# cal //展示日历
6、从当前时间往前或往后推算
使用场景:比如我们切割日志在今天的0时0分,那么被切割出去的日志应该以昨天的日期来标记,因此需要倒推一天
# date -d "-1day" //当前系统时间为3月21日,输出结果为3月20日
# date -d "-1day" +%F
# date -d "-1 month" +%F //上个月
# date -d "-1 year" +%F //表示去年,year后面也可以加上s,day和month后也可以加上s
其他的时分秒也诸如此类
7、时间戳
# date +%s //获取时间戳
# date -d @1521563928 //将时间戳换算成日期
# date +%s -d "2017-03-21 00:38:48" //将日期换算成时间戳
1、date +%w
%w day of week (06); 0 is Sunday
2、如果星期2-6,上一个工作日肯定就是
t1=`date -d yesterday`
或者
t2=`date -d -1day`
3、如果星期天,上一个工作日肯定就是
t3=`date -d -2day`
4、如果星期1,上一个工作日肯定就是
t4=`date -d -3day`
5、法定节假日根据实际情况算吧
6、实例
#!/bin/sh
week=`date +%w`
case "$week" in
0)
last_work_day=`date -d -2day`
;;
1)
last_work_day=`date -d -3day`
;;
)
last_work_day=`date -d -1day`
;;
esac
echo $last_work_day
以上就是关于shell脚本计算时间全部的内容,包括:shell脚本计算时间、powershell获取0时区时间、用shell命令取得文件生成时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)