用Python处理时间日期字符串的小结


=Start=

缘由:

工作中经常会碰到用Python解析日志的情况。比较常见的就是解析syslog产生的日志:需要解析字符串获知日志产生的时间。用到的地方挺多的,值得记录一下。

参考解答:
%a 英文星期的简写,例如:Wed
%A 英文星期的完整拼写,例如:Wednesday
%b 英文月份的简写,例如:Jun
%B 英文月份的完整拼写,例如:June
%Y 年份的完整拼写,例如:「2016」
%m 月份(用两位表示) (01..12)
%d (月份中的)几号(用两位表示) (01..31)
%H 小时(按 24 小时制显示,用两位表示) (00..23)
%I 小时(按 12 小时制显示,用两位表示) (01..12)
%M 分钟数(用两位表示) (00..59)
%S  秒数(用两位表示)(00..60)
%j 本年从第1天开始计数到当天的天数
%w 星期数,0-6之间(0是周日)
%W 当天属于本年的第几周,周一作为一周的第一天进行计算
%x 按照 (mm/dd/yy) 格式显示当前日期
%X 按照 (%H:%M:%S) 格式显示当前时间,例如:「22:45:03」

%s     从 1970年1月1日0点0分0秒到现在历经的秒数 (GNU扩充)
实际使用样例:
"""XXXX Jun 19 22:45:03 XXXX"""
from datetime import datetime
month = "Jun"
day = "19"
time = "22:45:03"
str_time = str(datetime.strptime(month+day.zfill(2)+time+str(datetime.now().year), "%b%d%X%Y"))
print str_time # 2016-06-19 22:45:03

&

from datetime import datetime
print datetime.now().strftime('%Y-%b-%d %H:%M:%S') # 2016-Jun-22 19:34:36
print datetime.now().strftime('%Y-%B-%d %H:%M:%S') # 2016-June-22 19:35:28
print datetime.now() # 2016-06-22 19:36:33.832560

&

import time
time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1347517370))
time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(1346114717972/1000.))

#或

from datetime import datetime
>>> ts_epoch = 1362301382
>>> ts = datetime.fromtimestamp(ts_epoch).strftime('%Y-%m-%d %H:%M:%S')
>>> ts
'2013-03-03 01:03:02'

&

import time
import datetime

print '\nStart @ %s' % (datetime.datetime.now().strftime("%Y-%m-%d %H:%M"), )
start = time.time()
ctime_str = (datetime.datetime.now() - datetime.timedelta(hours = 1)).strftime("%Y%m%d%H") # 一个小时之前的时间戳字符串「2016062218」
print 'Done! Elapsed %d seconds.\n' % (time.time() - start, )
总结:
  • 一般情况下,计时用time模块;
  • 如果需要将[特定格式的]时间戳字符串转换成特定对象,需要使用 datetime.datetime.strptime() 函数;
  • 如果需要生成指定格式的日期字符串,可以使用的函数为 datetime.datetime.strftime() ;
  • 特殊一点的就是:datetime.datetime.fromtimestamp() 和 time.localtime() 。
参考链接:

=END=


《 “用Python处理时间日期字符串的小结” 》 有 6 条评论

  1. 如何将 Unix时间戳(timestamp) 转换成普通可理解的时间格式?
    http://tool.chinaz.com/Tools/unixtime.aspx
    `
    如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)?
    如何在不同编程语言中实现 Unix时间戳(Unix timestamp) → 普通时间?
    如何在不同编程语言中实现 普通时间 → Unix时间戳(Unix timestamp)?
    `
    http://stackoverflow.com/questions/3682748/converting-unix-timestamp-string-to-readable-date-in-python

    分别用Linux上的date命令和Mac上的date命令该如何实现?
    `
    # Linux
    date -d @1493195547
    date -d @1493195547 +”%F %T”
    # Mac
    date -r 1493195547
    date -r 1493195547 “+%F %T”
    `

  2. Python中如何获取当天是当月的第几天(以空格填充,而非以0填充)
    https://stackoverflow.com/questions/904928/python-strftime-date-without-leading-0
    https://www.gnu.org/software/libc/manual/html_node/Formatting-Calendar-Time.html
    `
    rsyslog的日志格式里面出现了(用空格填充):
    Nov 1
    而不是预计的(用0填充):
    Nov 01

    而之前的Python脚本写的是:
    In [8]: time.strftime(“%b %d “)
    Out[8]: ‘Nov 01 ‘

    In [11]: time.strftime(“%b %-d “)
    Out[11]: ‘Nov 1 ‘

    In [12]: time.strftime(“%b %e “)
    Out[12]: ‘Nov 1 ‘

    所以,如果希望处理这种「以空格填充」的时候,需要使用 ‘%e’ 而不是常见的 ‘%d’ ,以上。粗暴的方法也有,那就是 str.replace() ,不过不太优雅就是了。
    `

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注