- 论坛徽章:
- 8
|
呵呵,只是一个毛坯
总是有讨论关于时间计算的帖子,各个系统的手法不同
下面这个脚本将时间戳转化为YYYYMMDDHHMMSS的GMT时间
比如想得到半小时前的GMT时间
t=$(date +%s)
let t=t-1800
echo t|./tmst2gmt.sh
就可以得到了,1800是半小时的秒数
写的很粗糙,当然也可以用shell现实,我用了awk给大家抛一砖
- #!/bin/awk -f
- #name tmst2gmt.sh
- #eg: date +%s|tmst2gmt.sh
- # echo $(($(date +%s) - 300))|tmst2gmt.sh
- function tmst2gmt(timest)
- {
- close("date +%s")
- split("365 366 365 365",dpy)
- split("31 28 31 30 31 30 31 31 30 31 30 31",dpm)
- split("31 29 31 30 31 30 31 31 30 31 30 31",dpdm)
- year=timest/(1461*24*3600)
- sub(/\..*/,"",year)
- year=1970+year*4
- timec=timest%(1461*24*3600)
- for (i=1;(timec-dpy[i]*24*3600)>0;i++){year++;timec=timec-dpy[i]*24*3600}
- month++
- if(year%4==0){
- for (i=1;(timec-dpdm[i]*24*3600)>0;i++){month++;timec=timec-dpdm[i]*24*3600}}
- else{
- for (i=1;(timec-dpm[i]*24*3600)>0;i++){month++;timec=timec-dpm[i]*24*3600}}
- day=timec/24/3600
- sub(/\..*/,"",day)
- day++
- timec=timec%(24*3600)
- hour=timec/3600
- sub(/\..*/,"",hour)
- timec=timec%3600
- min=timec/60
- sub(/\..*/,"",min)
- second=timec%60
- printf "%4s%02s%02s%02s%02s%02s\n", year, month, day, hour, min, second
- }
- {tmst2gmt($0)}
复制代码 |
|