深圳市建设工程合同备案网站,网上推广用什么平台推广最好,网站维护中模版,流媒体 网站开发时间戳与当地时间 概念#xff1a; 1.时间戳#xff1a;
时间戳是指格林威治时间自1970年1月1日#xff08;00:00:00 GMT#xff09;至当前时间的总秒数。它也被称为Unix时间戳#xff08;Unix Timestamp#xff09;。通俗的讲#xff0c;时间戳是一份能够表示一份数据…时间戳与当地时间 概念 1.时间戳
时间戳是指格林威治时间自1970年1月1日00:00:00 GMT至当前时间的总秒数。它也被称为Unix时间戳Unix Timestamp。通俗的讲时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 2.当地时间即夏时制DST
又称“日光节约时制”和“夏令时间”是一种为节约能源而人为规定地方时间的制度在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间提前一小时可以使人早起早睡减少照明量以充分利用光照资源从而节约照明用电。
以上俩个也是时间的表示方式 AWK的内置时间函数
grep/sed/awk用正则去筛选日志时如果要精确到小时、分钟、秒则非常难以实现。
但是awk提供了mktime()函数它可以将时间转换成epoch时间值。
# 2019-11-10 03:42:40转换成epoch为1970-01-01 00:00:00
$ awk BEGIN{print mktime(2019 11 10 03 42 40)}
1573328560
借此可以取得日志中的时间字符串部分再将它们的年、月、日、时、分、秒都取出来然后放入mktime()构建成对应的epoch值。因为epoch值是数值所以可以比较大小从而决定时间的大小。 实战案例 案例一
strptime1()实现的是将2019-11-10T03:42:4008:00格式的字符串转换成epoch值然后which_time比较大小即可筛选出精确到秒的日志。可以利用patsplit来取时间中的数字
BEGIN{
which_time mktime(2019 11 10 03 42 40) #要筛选什么时间的日志将其时间构建成epoch值
}
{
match($0,^.*\\[(.*)|1].*,arr) #取出日志中的日期时间字符串部分tmp_time strptime1(arr[1]) # 将日期时间字符串转换为epoch值if(tmp_time which_time){print} #通过比较epoch值来比较时间大小
}# 构建的时间字符串格式为2019-11-10T03:424008:00
function strptime1(str,arr,Y,M,D,H,m,S){
patsplit(str,arr,[0-9]{1,4})
Yarr[1]
Marr[2]
Darr[3]
Harr[4]
marr[5]
Sarr[6]
return mktime(sprintf(%s %s %s %s %s %s, Y,M,D,H,m,S))
}# 可以使用match gsub gensub ,先将各个标点符号替换成空格然后再用split进行字段划分#patsplit使用正则表达式来匹配字符串将匹配成功的部分显示出来并保存到数组当中.需要指定字符串数组正则表达式由此已经取到了年月日时分秒 即可得到时间 案例二
strptime2()实现的是将10/Nov/2019:23:53:4408:00格式的字符串转换成epoch值然后和which_time比较大小即可筛选出精确到秒的日志。
BEGIN{# 要筛选什么时间的日志将其时间构建成epoch值which_time mktime(2019 11 10 03 42 40)
}{# 取出日志中的日期时间字符串部分match($0,^.*\\[(.*)\\].*,arr)# 将日期时间字符串转换为epoch值tmp_time strptime2(arr[1])# 通过比较epoch值来比较时间大小if(tmp_time which_time){print }
}# 构建的时间字符串格式为10/Nov/2019:23:53:4408:00
function strptime2(str,dt_str,arr,Y,M,D,H,m,S) {dt_str gensub([/:], ,g,str)# dt_sr 10 Nov 2019 23 53 44 08 00split(dt_str,arr, )Yarr[3]Mmon_map(arr[2])Darr[1]Harr[4]marr[5]Sarr[6]return mktime(sprintf(%s %s %s %s %s %s,Y,M,D,H,m,S))
}function mon_map(str,mons){mons[Jan]1mons[Feb]2mons[Mar]3mons[Apr]4mons[May]5mons[Jun]6mons[Jul]7mons[Aug]8mons[Sep]9mons[Oct]10mons[Nov]11mons[Dec]12return mons[str]
}