python处理时间常用方法
常用模块:time
, datetime
, calendar
常用函数:
time.strftime
: time =>string
time.strptime
: string=>time
datetime.timedelta
: 日期加减法
import time
import datetime
tick = time.time()
//1578066383.60392
localtime = time.localtime(time.time())
//time.struct_time(tm_year=2020, tm_mon=1, tm_mday=3, tm_hour=23, tm_min=46, tm_sec=23, tm_wday=4, tm_yday=3, tm_isdst=0)
time_1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
time_2 = time.strftime("%a %b %H:%M:%S %Y", time.localtime())
//2020-01-03 23:55:11
//Fri Jan 23:55:11 2020
a = "Fri Jan 23:33:21 2020"
b = "2020-01-03 23:36:08"
print(time.mktime(time.strptime(a, "%a %b %H:%M:%S %Y")))
print(time.mktime(time.strptime(b, "%Y-%m-%d %H:%M:%S")))
print(datetime.datetime.strptime(b, "%Y-%m-%d %H:%M:%S"))
//1577892801.0
//1578065768.0
//2020-01-03 23:36:08// 类型<class 'datetime.datetime'>
//日期加减法
d1 = datetime.datetime.strptime('2012-03-05 17:41:20', '%Y-%m-%d %H:%M:%S')
d2 = datetime.datetime.strptime('2012-03-02 13:44:25', '%Y-%m-%d %H:%M:%S')
delta = d1 - d2
print(delta.days, delta.seconds)
//3 14215
# datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
now = datetime.datetime.now()
delta = datetime.timedelta(days=-5) # days可正,为5天后,负数为5天前
n_days = now + delta
print(n_days.strftime('%Y-%m-%d %H:%M:%S'))
//2019-12-30 00:03:24
参考示例:
# coding = utf-8
# time_utils.py
import re
import time
import datetime
def time_now():
return time.time() + 0
def int_time_now():
return int(time.time() + 0)
def time_format_str(sec=None, format='%Y-%m-%d'):
if sec is None:
sec = time_now()
elif sec == 0:
return ''
return time.strftime(format, time.localtime(sec))
def date_format_str(date, format='%Y-%m-%d %H:%M:%S'):
if not date:
return ''
return date.strftime(format)
def time_format_time(secs):
return '%02d:%02d:%02d' % (secs / 3600, (secs % 3600) / 60, secs % 60)
def time_format_date(sec=None):
if sec is None:
sec = time_now()
return time.strftime('%Y-%m-%d', time.localtime(sec))
def time_parse_str(time_str, format="%Y-%m-%d %H:%M:%S"):
sec = time.mktime(time.strptime(time_str, format))
return sec
def time_extract_str(time_str):
m = re.search('(\d+)[-](\d+)[-](\d+)\s(\d+)\:(\d+)\:(\d+)', time_str)
if m:
return (int(m.group(1)), int(m.group(2)), int(m.group(3)), int(m.group(4)), int(m.group(5)), int(m.group(6)),)
return None
def time_hour(sec=None):
if sec is None:
sec = time_now()
return int(sec / 3600)
def time_date(sec=None):
if sec is None:
sec = time_now()
return int((sec - time.altzone) / 86400)
def begin_of_day(sec=None, parse=True):
if sec is None:
sec = time_now()
return TimeUtil(sec).begin_of_day(parse)
def end_of_day(sec=None):
if sec is None:
sec = time_now()
return TimeUtil(sec).end_of_day()
def begin_of_week(sec=None):
return TimeUtil(sec).begin_of_week()
def end_of_week(sec=None):
return TimeUtil(sec).end_of_week()
def begin_of_month(sec=None):
return TimeUtil(sec).begin_of_month()
def end_of_month(sec=None):
return TimeUtil(sec).end_of_month()
def frequency_to_interval(frequency):
count, gap = frequency.split('/')
if gap == 'h':
return 3600 / int(count)
class TimeUtil:
def __init__(self, sec=None):
if sec:
self._utc = sec
else:
self._utc = time_now()
self._year, self._month, self._day, self._hour, self._minute, self._second \
= time_extract_str(time_format_str(self._utc, format="%Y-%m-%d %H:%M:%S"))
def begin_of_day(self, parse=True):
str_begin = '%04d-%02d-%02d %02d:%02d:%02d' % (self._year, self._month, self._day, 0, 0, 0)
if parse:
return time_parse_str(str_begin)
else:
return str_begin
def end_of_day(self):
return self.begin_of_day() + 3600 * 24
def begin_of_week(self):
week_day = datetime.date(self._year, self._month, self._day).weekday()
return self.begin_of_day() - week_day * 3600 * 24
def end_of_week(self):
return self.begin_of_week() + 7 * 3600 * 24
def begin_of_month(self):
str_begin = '%04d-%02d-%02d %02d:%02d:%02d' % (self._year, self._month, 1, 0, 0, 0)
return time_parse_str(str_begin)
def end_of_month(self):
if self._month != 12:
str_end = '%04d-%02d-%02d %02d:%02d:%02d' % (self._year, self._month + 1, 1, 0, 0, 0)
else:
str_end = '%04d-%02d-%02d %02d:%02d:%02d' % (self._year + 1, 1, 1, 0, 0, 0)
return time_parse_str(str_end)
使用示例:
from time_utils import *
print(begin_of_day)
# 1578067200
print(begin_of_month)
# 1577808000.0