免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1386 | 回复: 9

[文本处理] 如何计算时间差 [复制链接]

论坛徽章:
0
发表于 2020-06-24 06:17 |显示全部楼层

一个记录开始和结束的时间的文本, 需要计算时间差。 在网上找了很长时间没有找到如何将string 转换成时间的方法。 麻烦大神帮忙看看。

谢谢。


  1. 06/21/2020 21:42:24  06/21/2020 21:45:24  --- 3 minutes   
  2. 06/21/2020 22:42:25  06/22/2020 01:28:41  --- 2 hrs 46 minutes
  3. 06/21/2020 21:42:25  06/21/2020 22:42:32  --- 1 hr  
  4. 06/21/2020 23:42:25  06/22/2020 02:42:29  --- 3 hrs
复制代码


论坛徽章:
0
发表于 2020-06-24 13:04 |显示全部楼层
你这是标准时间格式,用powershell很容易转换成时间
$a= get-date '06/21/2020 21:42:24'

然后两个时间变量相减即可
$c = $b - $a

对于非标准时间格式,请看此贴:
http://bbs.chinaunix.net/thread-4257841-1-1.html
http://bbs.chinaunix.net/thread-4260148-1-1.html
http://bbs.chinaunix.net/thread-4315521-1-1.html

论坛徽章:
0
发表于 2020-06-24 17:13 |显示全部楼层
  1. #!/usr/bin/python3

  2. import datetime


  3. # 读取文本
  4. def readText(path):
  5.     with open(path, 'r') as f:
  6.         for line in f:
  7.             date1 = '{} {}'.format(line.split()[0], line.split()[1])
  8.             date2 = '{} {}'.format(line.split()[2], line.split()[3])
  9.             output = '{}  {}'.format(line.strip(), handleTime(date1, date2))
  10.             print(output)


  11. # 时间处理
  12. def handleTime(date1, date2):
  13.     d1 = datetime.datetime.strptime(date1, '%m/%d/%Y %H:%M:%S')
  14.     d2 = datetime.datetime.strptime(date2, '%m/%d/%Y %H:%M:%S')
  15.     result = (d2 - d1).seconds
  16.     return convertTime(result)


  17. # 时间转换
  18. def convertTime(result):
  19.     if result >= 60:
  20.         minute, seconds = divmod(result, 60)
  21.         if minute >= 60:
  22.             hour, minute = divmod(minute, 60)
  23.             return convertOutput(hour, minute, 'hour')
  24.         else:
  25.             return convertOutput(minute, seconds, 'minute')
  26.     else:
  27.         return '--- {} seconds'.format(result)


  28. # 后缀时间差输出
  29. def convertOutput(arg1, arg2, type):
  30.     if type == 'hour':
  31.         if arg1 == 1 and arg2 == 0:
  32.             return '--- {} hr'.format(arg1)
  33.         elif arg1 > 1 and arg2 != 0:
  34.             return '--- {} hrs {} minutes'.format(arg1, arg2)
  35.         elif arg1 > 1 and arg2 == 0:
  36.             return '--- {} hrs'.format(arg1)
  37.     elif type == 'minute':
  38.         if arg1 >= 1:
  39.             return '--- {} minutes'.format(arg1)


  40. def main():
  41.     # 文本路径
  42.     path = '/mnt/test/file'
  43.     readText(path)


  44. if __name__ == '__main__':
  45.     main()
复制代码

论坛徽章:
0
发表于 2020-06-24 17:15 |显示全部楼层
本帖最后由 jzsjm1002 于 2020-06-24 18:15 编辑
  1. #!/usr/bin/python3

  2. import datetime


  3. # 读取文本
  4. def readText(path):
  5.     with open(path, 'r') as f:
  6.         for line in f:
  7.             date1 = '{} {}'.format(line.split()[0], line.split()[1])
  8.             date2 = '{} {}'.format(line.split()[2], line.split()[3])
  9.             output = '{}  {}'.format(line.strip(), handleTime(date1, date2))
  10.             print(output)


  11. # 时间处理
  12. def handleTime(date1, date2):
  13.     d1 = datetime.datetime.strptime(date1, '%m/%d/%Y %H:%M:%S')
  14.     d2 = datetime.datetime.strptime(date2, '%m/%d/%Y %H:%M:%S')
  15.     result = (d2 - d1).seconds
  16.     return convertTime(result)


  17. # 时间转换
  18. def convertTime(result):
  19.     if result >= 60:
  20.         minute, seconds = divmod(result, 60)
  21.         if minute >= 60:
  22.             hour, minute = divmod(minute, 60)
  23.             return convertOutput(hour, minute, 'hour')
  24.         else:
  25.             return convertOutput(minute, seconds, 'minute')
  26.     else:
  27.         return '--- {} seconds'.format(result)


  28. # 后缀时间差输出
  29. def convertOutput(arg1, arg2, type):
  30.     if type == 'hour':
  31.         if arg1 == 1 and arg2 == 0:
  32.             return '--- {} hr'.format(arg1)
  33.         elif arg1 > 1 and arg2 != 0:
  34.             return '--- {} hrs {} minutes'.format(arg1, arg2)
  35.         elif arg1 > 1 and arg2 == 0:
  36.             return '--- {} hrs'.format(arg1)
  37.     elif type == 'minute':
  38.         if arg1 >= 1:
  39.             return '--- {} minutes'.format(arg1)


  40. def main():
  41.     # 文本路径
  42.     path = '/mnt/test/file'
  43.     readText(path)


  44. if __name__ == '__main__':
  45.     main()
复制代码

论坛徽章:
0
发表于 2020-06-24 20:51 |显示全部楼层
回复 2# 本友会机友会摄友会
谢谢。我的OS是 Solaris。SunOS 5.10 Generic_150400-66 sun4v sparc sun4v。没有get-date 命令。
bash: get-date: command not found



论坛徽章:
0
发表于 2020-06-25 20:44 |显示全部楼层
回复 1# KEN6503

  1. [/size][/font][/backcolor][/color][/align]cat a.txt
  2. 06/21/2020 21:42:24  06/21/2020 21:45:24
  3. 06/21/2020 22:42:25  06/22/2020 01:28:41
  4. 06/21/2020 21:42:25  06/21/2020 22:42:32
  5. 06/21/2020 23:42:25  06/22/2020 02:42:29
复制代码

  1. [/size][/font][/backcolor][/color][/align]awk -F'[:/ ]+' '{t1=mktime(sprintf("%s %s %s %s %s %s",$3,$1,$2,$4,$5,$6));t2=mktime(sprintf("%s %s %s %s %s %s",$9,$7,$8,$10,$11,$12));diff=t2-t1;hours=int(diff/3600);minutes=int(diff%3600/60);$13="---";if(hours>0){$14=hours (hours>1?" hrs ":" hr ")};if(minutes>0){$14=$14 (minutes (minutes>1?" minutes":" minute"))};print}' a.txt
复制代码

06 21 2020 21 42 24 06 21 2020 21 45 24 --- 3 minutes
06 21 2020 22 42 25 06 22 2020 01 28 41 --- 2 hrs 46 minutes
06 21 2020 21 42 25 06 21 2020 22 42 32 --- 1 hr
06 21 2020 23 42 25 06 22 2020 02 42 29 --- 3 hrs

论坛徽章:
0
发表于 2020-06-25 20:45 |显示全部楼层
[Vic@DESKTOP-5UNFVRS test]$cat a.txt
06/21/2020 21:42:24  06/21/2020 21:45:24
06/21/2020 22:42:25  06/22/2020 01:28:41
06/21/2020 21:42:25  06/21/2020 22:42:32
06/21/2020 23:42:25  06/22/2020 02:42:29
[Vic@DESKTOP-5UNFVRS test]$awk -F'[:/ ]+' '{t1=mktime(sprintf("%s %s %s %s %s %s",$3,$1,$2,$4,$5,$6));t2=mktime(sprintf("%s %s %s %s %s %s",$9,$7,$8,$10,$11,$12));diff=t2-t1;hours=int(diff/3600);minutes=int(diff%3600/60);$13="---";if(hours>0){$14=hours (hours>1?" hrs ":" hr ")};if(minutes>0){$14=$14 (minutes (minutes>1?" minutes":" minute"))};print}' a.txt
06 21 2020 21 42 24 06 21 2020 21 45 24 --- 3 minutes
06 21 2020 22 42 25 06 22 2020 01 28 41 --- 2 hrs 46 minutes
06 21 2020 21 42 25 06 21 2020 22 42 32 --- 1 hr
06 21 2020 23 42 25 06 22 2020 02 42 29 --- 3 hrs

论坛徽章:
0
发表于 2020-06-26 10:32 |显示全部楼层
回复 1# KEN6503

cat a.txt
06/21/2020 21:42:24  06/21/2020 21:45:24
06/21/2020 22:42:25  06/22/2020 01:28:41
06/21/2020 21:42:25  06/21/2020 22:42:32
06/21/2020 23:42:25  06/22/2020 02:42:29
  1. awk -F'[:/ ]+' '{t1=mktime(sprintf("%s %s %s %s %s %s",$3,$1,$2,$4,$5,$6));t2=mktime(sprintf("%s %s %s %s %s %s",$9,$7,$8,$10,$11,$12));diff=t2-t1;hours=int(diff/3600);minutes=int(diff%3600/60);out="--- ";if(hours>0){out=out hours (hours>1?" hrs ":" hr ")};if(minutes>0){out=out (minutes (minutes>1?" minutes":" minute"))};print $0,out}' a.txt
复制代码

06/21/2020 21:42:24  06/21/2020 21:45:24 --- 3 minutes
06/21/2020 22:42:25  06/22/2020 01:28:41 --- 2 hrs 46 minutes
06/21/2020 21:42:25  06/21/2020 22:42:32 --- 1 hr
06/21/2020 23:42:25  06/22/2020 02:42:29 --- 3 hrs

论坛徽章:
0
发表于 2020-06-27 11:56 |显示全部楼层
本帖最后由 Looiml 于 2020-07-03 16:20 编辑

论坛显示回帖失败,重复提交铸造此层。

论坛徽章:
0
发表于 2020-06-27 11:57 |显示全部楼层
回复 1# KEN6503

awk -F'[:/ ]+' '{t1=mktime(sprintf("%s %s %s %s %s %s",$3,$1,$2,$4,$5,$6));t2=mktime(sprintf("%s %s %s %s %s %s",$9,$7,$8,$10,$11,$12));diff=t2-t1;hours=int(diff/3600);minutes=int(diff%3600/60);out="--- ";if(hours>0){out=out hours (hours>1?" hrs ":" hr ")};if(minutes>0){out=out (minutes (minutes>1?" minutes":" minute"))};print $0,out}' a.txt
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年8月17日~19日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP