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 当前时区的名称
%% %号本身
'''
Python 时间函数总结
最新推荐文章于 2024-08-26 10:20:48 发布