Python学习入门(10)——时间
Python格式化日期时间的函数为datetime.datetime.strftime();由字符串转为日期型的函数为:datetime.datetime.strptime(),两个函数都涉及日期时间的格式化字符串,列举如下:
%a Abbreviated weekday name
%A Full weekday name
%b Abbreviated month name
%B Full month name
%c Date and time representation appropriate for locale
%d Day of month as decimal number (01 - 31)
%f Micro seconds as decimal number (0 - 99999)
%H Hour in 24-hour format (00 - 23)
%I Hour in 12-hour format (01 - 12)
%j Day of year as decimal number (001 - 366)
%m Month as decimal number (01 - 12)
%M Minute as decimal number (00 - 59)
%p Current locale's A.M./P.M. indicator for 12-hour clock
%S Second as decimal number (00 - 59)
%U Week of year as decimal number, with Sunday as first day of week (00 - 51)
%w Weekday as decimal number (0 - 6; Sunday is 0)
%W Week of year as decimal number, with Monday as first day of week (00 - 51)
%x Date representation for current locale
%X Time representation for current locale
%y Year without century, as decimal number (00 - 99)
%Y Year with century, as decimal number
%z, %Z Time-zone name or abbreviation; no characters if time zone is unknown
%% Percent sign
示例:
#!/usr/bin/python # it-homer in 2013 import sys reload(sys) sys.setdefaultencoding("utf-8") import datetime def format_time(): t = datetime.datetime.now() print(t) # 2013-11-20 09:36:51.198680 t = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') print(t) # 2013-11-20 09:39:16 t = datetime.datetime.now().strftime('%b-%d-%y %H:%M:%S') print(t) # Nov-20-13 09:36:51 t = datetime.datetime.now().strftime('%b-%d-%Y %H:%M:%S') print(t) # Nov-20-2013 09:36:51 # weekday t = datetime.datetime.now().strftime('%a %A %U %W %w') print(t) # Wed Wednesday 46 46 3 # month t = datetime.datetime.now().strftime('%b %B') print(t) # Nov November # day t = datetime.datetime.now().strftime('%d %j') print(t) # 20 324 # date and time for locale t = datetime.datetime.now().strftime('%c') print(t) # Wed Nov 20 10:15:49 2013 # hour t = datetime.datetime.now().strftime('%H %l') print(t) # 10 10 # A.M/P.M t = datetime.datetime.now().strftime('%p') print(t) # AM t = datetime.datetime.now().strftime('%x') print(t) # 11/20/13 t = datetime.datetime.now().strftime('%X') print(t) # 10:23:36 t = datetime.datetime.now().strftime('%x %X') print(t) # 11/20/13 10:24:47 t = datetime.datetime.now().strftime('%z') print(t) # t = datetime.datetime.now().strftime('%Z') print(t) # # 字符串转换成datetime t = datetime.datetime.strptime('Nov-20-13 09:42', '%b-%d-%y %H:%M') print(t) # 2013-11-20 09:42:00 t = datetime.datetime(2013, 11, 20, 9, 42) print(t) # 2013-11-20 09:42:00 # datetime转换成字符串 t = datetime.datetime.now().strftime('%b-%d-%y %H:%M:%S') print(t) # Nov-20-13 10:26:40 if __name__ == "__main__": format_time()
运行结果:
2013-11-20 10:29:26.456640
2013-11-20 10:29:26
Nov-20-13 10:29:26
Nov-20-2013 10:29:26
Wed Wednesday 46 46 3
Nov November
20 324
Wed Nov 20 10:29:26 2013
10 10
AM
11/20/13
10:29:26
11/20/13 10:29:26
2013-11-20 09:42:00
2013-11-20 09:42:00
Nov-20-13 10:29:26
timestamp <--> datetime
def main(): createtime = int(time.time()) # createtime = 1393316647 basefname2 = datetime.datetime.fromtimestamp(createtime).strftime('%Y-%m-%d %H:%M:%S') print("timestamp -> datetime: %d : %s" % (createtime, basefname2)) nowtime = datetime.datetime.now() future = nowtime + datetime.timedelta(minutes = 5) print("datetime add: %s : %s" % (nowtime, future)) ts = time.mktime(future.timetuple()) print("datetime -> timestamp: %s : %d" % (future, ts))
运行结果:
timestamp -> datetime: 1393317675 : 2014-02-25 16:41:15
datetime add: 2014-02-25 16:41:15.900701 : 2014-02-25 16:46:15.900701
datetime -> timestamp: 2014-02-25 16:46:15.900701 : 1393317975
timestamp 转 datetime
" createtime ":1389151309
basefname2 = datetime.datetime.fromtimestamp( createtime ).strftime('%Y-%m-%d %H:%M:%S')
结果:
" createtime2 ":"2014-01-08 11:21:49"
参考: stackoverflow ,
完整示例:
def convet_cdate(ctime): cday = 0 chour = 0 cminite = 0 csecond = 0 # ctime = '15秒前' # ctime = '10分钟前' # ctime = '2小时14分钟前' # ctime = '1天24分钟前' # ctime = '1天10小时24分钟前' # ctime = '1天10小时24分钟15秒前' ctime = '29分钟前' # ctime = '23小时46分钟前' if '天' in ctime: cday = int(ctime.split('天')[0]) ctime = ctime.split('天')[1] if '小时' in ctime: chour = int(ctime.split('小时')[0]) ctime = ctime.split('小时')[1] if '分钟' in ctime: cminite = int(ctime.split('分钟')[0]) ctime = ctime.split('分钟')[1] if '秒' in ctime: csecond = int(ctime.split('秒')[0]) elapse_time = cday * 24 * 3600 + chour * 3600 + cminite * 60 + csecond print("cday: " + str(cday) + "; chour: " + str(chour) + ", cminite: " + str(cminite) + "; csecond: " + str(csecond)) print("elapse_time: " + str(elapse_time)) ctime_now = int(time.time()) print("ctime_now: " + str(ctime_now)) print("elapse_now: " + str(ctime_now - elapse_time)) # timestamp -> datetime result = datetime.datetime.fromtimestamp(ctime_now - elapse_time).strftime('%Y-%m-%d %H:%M:%S') print("result: " + str(result))
计算两个日期差
def cal_date_delta(cls, dateStrFirst='20160912', dateStrLast='20660911'): ''' 计算日期相差的天数,返回整数 dateStrFirst : 起始日期,字符串格式,如 20160912 dateStrLast : 结束日期,如 20660911 ''' if isinstance(dateStrFirst, int): dateStrFirst = str(dateStrFirst) if isinstance(dateStrLast, int): dateStrLast = str(dateStrLast) d_first = datetime.datetime(int(dateStrFirst[0:4]), int(dateStrFirst[4:6]), int(dateStrFirst[6:8])) d_last = datetime.datetime(int(dateStrLast[0:4]), int(dateStrLast[4:6]), int(dateStrLast[6:8])) date_delta = (d_last - d_first).days return date_delta
测试结果:
print 20160912, 20660911, YGDTime.cal_date_delta() # 20160912 20660911 18261 print "20161129", "20161202", YGDTime.cal_date_delta(20161128, 20161202) # 20161129 20161202 4 print 20161129, 20161202, YGDTime.cal_date_delta(20161128, 20171202) # 20161129 20161202 369
计算某个日期之前的日期
@classmethod def cal_date_dtime(cls, dateStr=None, days=30): ''' 计算指定日期之前的某一天,计算之后的某一天days用负数 dateStr : 给定日期,如 20160912 ''' if dateStr is None: dateStr = str(datetime.date.today()) else: if isinstance(dateStr, int): dateStr = str(dateStr) dateStr = '-'.join((dateStr[0:4], dateStr[4:6], dateStr[6:8])) dateStr_date = datetime.datetime.strptime(dateStr, "%Y-%m-%d").date() dateStr_date_lastStr = dateStr_date + datetime.timedelta(-days) dateStr_date_lastInt = int(str(dateStr_date_lastStr).replace("-","")) return dateStr_date_lastInt
测试结果:
print 20160912, 0, YGDTime.cal_date_dtime() # 20160912 0 20161104 print 20160912, 90, YGDTime.cal_date_dtime(20160912, -18261) # 20160912 90 20660911 print 20660911, 18261, YGDTime.cal_date_dtime('20660911', 18261) # 20660911 18261 20160912
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2016-12-04 16:47:42
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!