Python 时间函数总结

import time, datetime

import pytz
from dateutil import parser

'''时间函数分析'''

'''1. from dateutil import parser # 解析时间为 <type 'datetime.datetime'>'''
# 输入美式日期
print parser.parse('22nd,July,2009')  # 2009-07-22 00:00:00 # <type 'datetime.datetime'>
# 输入以-为分割日期
print parser.parse('2018-04-20')  # 2018-04-20 00:00:00
# 输入无间隔日期
print parser.parse('20180420')  # 2018-04-20 00:00:00
# 只是输入年份 后续的日期就是当前日期
print parser.parse('2018')  # 2018-09-06 00:00:00
# 只是输入天 后续的日期就是当前日期
print parser.parse('12,')  # 2020-09-12 00:00:00
# 只输入时间
print parser.parse('12:0:0')  # 2020-09-06 12:00:00

'''2. import pytz 时区处理库'''
print pytz.country_timezones('cn')  # [u'Asia/Shanghai', u'Asia/Urumqi']
print pytz.all_timezones  # 打印支持所有的时区
# 创建时区对象
tz = pytz.timezone('Asia/Shanghai')
et = pytz.timezone('Etc/GMT+8')
utc = pytz.utc
# 然后在创建时间对象时进行指定
print datetime.datetime.now(tz)  # 2020-09-07 09:40:42.815845+08:00
print datetime.datetime.now(et)  # 2020-09-06 17:40:42.815881-08:00 # 比上海多8小时
print datetime.datetime.now(utc)  # 2020-09-07 01:40:42.815892+00:00 # 比上海少8小时

# 注意这个多了6分钟
print datetime.datetime(2009, 2, 21, 15, 12, 33, tzinfo=tz)  # 2009-02-21 15:12:33+08:06
# 需要使用localize处理
print tz.localize(datetime.datetime(2009, 2, 21, 15, 12, 33))  # 2009-02-21 15:12:33+08:00

# 时区转换
print datetime.datetime.now(tz)  # 2020-09-06 22:47:22.462503+08:00
print datetime.datetime.now(utc)  # 2020-09-06 14:47:22.462515+00:00

print datetime.datetime.now(tz).astimezone(utc)  # 2020-09-06 14:47:22.462515+00:00
print parser.parse('20180420')  # 2018-04-20 00:00:00
print parser.parse('20180420').isoformat()  # 2018-04-20T00:00:00
print parser.parse(parser.parse('20180420').isoformat() + "+00")  # 2018-04-20 00:00:00+00:00
dt = parser.parse(parser.parse('20180420').isoformat() + "+00")
# 可以调用 astimezone() 方法,生成其他时区的时间(会根据时差来计算)
print dt.astimezone(
    pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%dT%H:%M:%S')  # 2018-04-20T08:00:00

# 获取上个月最后一天的日期(本月的第一天减去1天)
print datetime.date(datetime.date.today().year, datetime.date.today().month, 1) - datetime.timedelta(1)
# 获取时间差(时间差单位为秒,常用于计算程序运行的时间)
print datetime.datetime.now()  # 2020-09-07 09:50:26.765541
print datetime.datetime.now() + datetime.timedelta(hours=10)  # 2020-09-07 19:50:26.765546
print (datetime.datetime.now() + datetime.timedelta(hours=10)).ctime()  # Mon Sep  7 19:51:27 2020

'''import time'''
print time.time()  # 1599443738.24 # 看一下当前的时间,和其他很多语言相似这是从epoch(1970 年 1 月 1 日 00:00:00)开始到当前的秒数
# localtime返回tuple格式的时间,有一个和它类似的函数叫gmtime(),2个函数的差别是时区,gmtime()返回的是0时区的值,localtime返回的是当前时区的值
print time.localtime()  # time.struct_time(tm_year=2020, tm_mon=9, tm_mday=7, tm_hour=10, tm_min=22, tm_sec=21, tm_wday=0, tm_yday=251, tm_isdst=0)

print time.strftime("%Y-%m-%d %H:%M:%S")  # 2020-09-07 10:23:08
# 加上时区参数
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))  # 2020-09-07 10:24:29
print time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.time()))  # 2020-09-07 02:24:29

print time.timezone  # -28800 代表与 0 时区相差这么多秒 -28800=-8*3600,即为东八区

print datetime.datetime.now()


def str2date_event(string):
    if '.' in string:
        string = string.split('.')[0]
    if "+" in string:
        string = string.split('+')[0]
    if "T" in string:
        return datetime.datetime.strptime(string, "%Y-%m-%dT%H:%M:%S")
    return datetime.datetime.strptime(string, "%Y-%m-%d %H:%M:%S")


def get_local_date(request, time, timezone='Asia/Shanghai'):
    # Todo(gcb) get timezone from django, current it always
    # returns UTC.
    # current_tz = request.session.get(
    #    'django_timezone',
    #    request.COOKIES.get('django_timezone', 'UTC')),
    try:
        dt = parser.parse(time.isoformat() + "+00")
        return dt.astimezone(
            pytz.timezone(timezone)).strftime('%Y-%m-%dT%H:%M:%S')
    except Exception as ex:
        info = "Get local date exception: %s, message: %s" % (
            ex.__class__.__name__, ex
        )
        result = localTimeToUtcTime(time, timezone)
        return result


def localTimeToUtcTime(localTime, timezone):
    try:
        if 'Etc/GMT+8' == timezone:
            utcTime = localTime - datetime.timedelta(hours=8)
        elif 'Asia/Shanghai' == timezone:
            utcTime = localTime + datetime.timedelta(hours=8)
        else:
            utcTime = localTime
        result = utcTime.strftime('%Y-%m-%dT%H:%M:%S')
    except Exception as ex:
        info = "Local time to utc time exception: %s, message: %s" % (
            ex.__class__.__name__,
            ex)
        result = ""
    return result


# format "2015-07-30T12:08:43.433000" into "2015-07-30 12:08:43"
def format_time(time):
    if '.' in time:
        time = time.split('.')[0]
    if "T" in time:
        time = time.replace("T", " ")
    return time


# body = {'start': ''}
# start_time = get_local_date("request", parser.parse(body['start']), 'Etc/GMT+8')


'''
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)

%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值