python如何处理时间

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值