目录
时间相关概念 Python time模块 时间格式化 计时器功能 time模块其他内置函数 time模块包含的属性 datetime模块 date类 time类 datetime类 timedelta类 tzinfo类 pytz模块 时区转换 夏令时处理 dateutil模块 parser.parse() rrule.rrule() Arrow UTC 时间 当地时间 解析时间 Unix 时间戳 格式化日期和时间 转换为区域时间 工作日 移动时间 夏令时 人性化的日期和时间 ISO 8601类
时间相关概念
Python time模块

time() 返回时间戳格式的时间 (相对于1.1 00:00:00以秒计算的偏移量) ctime() 返回字符串形式的时间,可以传入时间戳格式时间,用来做转化 asctime() 返回字符串形式的时间,可以传入struct_time形式时间,用来做转化 localtime() 返回当前时间的struct_time形式,可传入时间戳格式时间,用来做转化 gmtime() 返回当前时间的struct_time形式,UTC时区(0时区) ,可传入时间戳格式时间,用来做转化
>>> import time
>>> time.time()
1473386416.954
>>> time.ctime()
'Fri Sep 09 10:00:25 2016'
>>> time.ctime(time.time())
'Fri Sep 09 10:28:08 2016'
>>> time.asctime()
'Fri Sep 09 10:22:40 2016'
>>> time.asctime(time.localtime())
'Fri Sep 09 10:33:00 2016'
>>> time.localtime()
time.struct_time(tm_year=2016, tm_mon=9, tm_mday=9, tm_hour=10, tm_min=1, tm_sec=19, tm_wday=4, tm_yday=253, tm_isdst=0)
>>> time.localtime(time.time())
time.struct_time(tm_year=2016, tm_mon=9, tm_mday=9, tm_hour=10, tm_min=19, tm_sec=11, tm_wday=4, tm_yday=253, tm_isdst=0)
>>> time.gmtime()
time.struct_time(tm_year=2016, tm_mon=9, tm_mday=9, tm_hour=2, tm_min=13, tm_sec=10, tm_wday=4, tm_yday=253, tm_isdst=0)
>>> time.gmtime(time.time())
time.struct_time(tm_year=2016, tm_mon=9, tm_mday=9, tm_hour=2, tm_min=15, tm_sec=35, tm_wday=4, tm_yday=253, tm_isdst=0)
tm_wday 一周的第几天(周日是0) tm_yday 一年的第几天 tm_isdst 是否是夏令时
时间格式化
>>> time.mktime(time.localtime())
1473388585.0
%c 本地相应的日期和时间表示 %x 本地相应日期 %X 本地相应时间 %y 去掉世纪的年份(00 – 99) %Y 完整的年份 %m 月份(01 – 12) %b 本地简化月份名称 %B 本地完整月份名称 %d 一个月中的第几天(01 – 31) %j 一年中的第几天(001 – 366) %U 一年中的星期数。(00 – 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。 %W 和%U基本相同,不同的是%W以星期一为一个星期的开始。 %w 一个星期中的第几天(0 – 6,0是星期天) %a 本地(locale)简化星期名称 %A 本地完整星期名称 %H 一天中的第几个小时(24小时制,00 – 23) %I 第几个小时(12小时制,01 – 12) %p 本地am或者pm的相应符,“%p”只有与“%I”配合使用才有效果。 %M 分钟数(00 – 59) %S 秒(01 – 61),文档中强调确实是0 – 61,而不是59,闰年秒占两秒 %Z 时区的名字(如果不存在为空字符) %% ‘%’字符
>>> time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
'2016-09-09 10:54:21'
>>> time.strptime(time.ctime())
time.struct_time(tm_year=2016, tm_mon=9, tm_mday=9, tm_hour=11, tm_min=0, tm_sec=4, tm_wday=4, tm_yday=253, tm_isdst=-1)
计时器功能
import time
time.sleep(1)
print("clock1:%s" % time.clock())
time.sleep(1)
print("clock2:%s" % time.clock())
time.sleep(1)
print("clock3:%s" % time.clock())
clock1:1.57895443216e-06
clock2:1.00064381867
clock3:2.00158724394
time模块其他内置函数
altzone() 返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。 tzset() 根据环境变量TZ重新初始化时间相关设置。
time模块包含的属性
timezone 是当地时区(未启动夏令时)距离格林威治的偏移秒数(>0,美洲;<=0大部分欧洲,亚洲,非洲)。 tzname 包含一对根据情况的不同而不同的字符串,分别是带夏令时的本地时区名称和不带的。
import time
print(time.timezone)
print(time.tzname)
print(time.tzname[0].decode("GBK"))
print(time.tzname[1].decode("GBK"))
-28800
('\xd6\xd0\xb9\xfa\xb1\xea\xd7\xbc\xca\xb1\xbc\xe4', '\xd6\xd0\xb9\xfa\xcf\xc4\xc1\xee\xca\xb1')
中国标准时间
中国夏令时
datetime模块

date:表示日期的类。常用的属性有year, month, day time:表示时间的类。常用的属性有hour, minute, second, microsecond datetime:表示日期时间 timedelta:表示时间间隔,即两个时间点之间的长度 tzinfo:与时区有关的相关信息
date类
max、min:date对象所能表示的最大、最小日期 resolution:date对象表示日期的最小单位。这里是天 today():返回一个表示当前本地日期的date对象 fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象 fromordinal(ordinal):将Gregorian日历时间转换为date对象(特殊历法用不上)
from datetime import date
import time
print('date.max:', date.max)
print('date.min:', date.min)
print('date.resolution:', date.resolution)
print('date.today():', date.today())
print('date.fromtimestamp():', date.fromtimestamp(time.time()))
date.max: 9999-12-31
date.min: 0001-01-01
date.resolution: 1 day, 0:00:00
date.today(): 2016-09-12
date.fromtimestamp(): 2016-09-12
.year:返回年 .month:返回月 .day:返回日 .replace(year, month, day):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变) .weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推 .isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推 .isocalendar():返回格式如(year, wk num, wk day) .isoformat():返回格式如’YYYY-MM-DD’的字符串 .strftime(fmt):自定义格式化字符串。与time模块中的strftime类似。 .toordinal():返回日期对应的Gregorian Calendar日期
from datetime import date
today = date.today()
print('today:', today)
print('.year:', today.year)
print('.month:', today.month)
print('.replace():', today.replace(year=2017) )
print('.weekday():', today.weekday())
print('.isoweekday():', today.isoweekday())
print('.isocalendar():', today.isocalendar())
print('.isoformat():', today.isoformat())
print('.strftime():', today.strftime('%Y-%m-%d') )
print('.toordinal():', today.toordinal())
today: 2016-09-12
.year: 2016
.month: 9
.replace(): 2017-09-12
.weekday(): 0
.isoweekday(): 1
.isocalendar(): (2016, 37, 1)
.isoformat(): 2016-09-12
.strftime(): 2016-09-12
.toordinal(): 736219
date2 = date1 + timedelta # 日期加上一个间隔,返回一个新的日期对象 date2 = date1 – timedelta # 日期减去一个间隔,返回一个新的日期对象 timedelta = date1 – date2 # 两个日期相减,返回一个时间间隔对象 date1 < date2 # 两个日期进行比较
time类
min、max:time类所能表示的最小、最大时间。其中,time.min = time(0, 0, 0, 0), time.max = time(23, 59, 59, 999999) resolution:时间的最小单位,这里是1微秒
.hour、.minute、.second、.microsecond:时、分、秒、微秒 .tzinfo:时区信息 .replace([hour[, minute[, second[, microsecond[, tzinfo]]]]]):创建一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性(原有对象仍保持不变); .isoformat():返回型如”HH:MM:SS”格式的字符串表示; .strftime(fmt):返回自定义格式化字符串。
datetime类
min、max:datetime所能表示的最小值与最大值; resolution:datetime最小单位; today():返回一个表示当前本地时间的datetime对象; now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间; utcnow():返回一个当前utc时间的datetime对象; fromtimestamp(timestamp[, tz]):根据时间戮创建一个datetime对象,参数tz指定时区信息; utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象; combine(date, time):根据date和time,创建一个datetime对象; strptime(date_string, format):将格式字符串转换为datetime对象;
from datetime import datetime
import time
print('datetime.max:', datetime.max)
print('datetime.min:', datetime.min)
print('datetime.resolution:', datetime.resolution)
print('today():', datetime.today())
print('now():', datetime.now())
print('utcnow():', datetime.utcnow())
print('fromtimestamp(tmstmp):', datetime.fromtimestamp(time.time()))
print('utcfromtimestamp(tmstmp):', datetime.utcfromtimestamp(time.time()))
datetime.max: 9999-12-31 23:59:59.999999
datetime.min: 0001-01-01 00:00:00
datetime.resolution: 0:00:00.000001
today(): 2016-09-12 19:57:00.761000
now(): 2016-09-12 19:57:00.761000
utcnow(): 2016-09-12 11:57:00.761000
fromtimestamp(tmstmp): 2016-09-12 19:57:00.761000
utcfromtimestamp(tmstmp): 2016-09-12 11:57:00.761000
date():获取date对象; time():获取time对象; replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]): timetuple() utctimetuple() toordinal() weekday() isocalendar() isoformat([sep]) ctime():返回一个日期时间的C格式字符串,等效于ctime(time.mktime(dt.timetuple())); strftime(format)
timedelta类
tzinfo类
pytz模块

ZERO_TIME_DELTA = timedelta(0)
LOCAL_TIME_DELTA = timedelta(hours=8) # 本地时区偏差
class UTC(tzinfo):
def utcoffset(self, dt):
return ZERO_TIME_DELTA
def dst(self, dt):
return ZERO_TIME_DELTA
class LocalTimezone(tzinfo):
def utcoffset(self, dt):
return LOCAL_TIME_DELTA
def dst(self, dt):
return ZERO_TIME_DELTA
def tzname(self, dt):
return '+08:00'
import pytz
print(len(pytz.all_timezones))
print(len(pytz.common_timezones))
588
436
import pytz
print(pytz.country_timezones('cn'))
from datetime import datetime
import pytz
print(pytz.country_timezones('cn'))
tz1 = pytz.timezone(pytz.country_timezones('cn')[0])
print(tz1)
print(datetime.now(tz1))
tz2 = pytz.timezone(pytz.country_timezones('cn')[1])
print(tz2)
print(datetime.now(tz2))
[u'Asia/Shanghai', u'Asia/Urumqi']
Asia/Shanghai
2016-09-14 09:55:39.384000+08:00
Asia/Urumqi
2016-09-14 07:55:39.385000+06:00
时区转换
from datetime import datetime
import pytz
now = datetime.now()
tz = pytz.timezone('Asia/Shanghai')
print(tz.localize(now))
print(pytz.utc.normalize(tz.localize(now)))
2016-09-14 10:25:44.633000+08:00
2016-09-14 02:25:44.633000+00:00
from datetime import datetime
import pytz
utc = pytz.utc
beijing_time = pytz.timezone('Asia/Shanghai')
japan_time = pytz.timezone('Asia/Tokyo')
now = datetime.now(beijing_time)
print("Beijing Time:",now)
print("UTC:",now.astimezone(utc))
print("JAPAN TIME:",now.astimezone(japan_time))
Beijing Time: 2016-09-14 10:19:22.671000+08:00
UTC: 2016-09-14 02:19:22.671000+00:00
JAPAN TIME: 2016-09-14 11:19:22.671000+09:00
民國17年(1928年),國民政府統一中國,原中央觀象台的業務由南京政府中央研究院的天文研究所和氣象研究所分別接收。天文研究所編寫的曆書基本上沿襲中央觀象台的做法,仍將全國劃分為5個標準時區,只是在有關交氣、合朔、太陽出沒時刻等處,不再使用北平的地方平時,而改以南京所在的標準時區的區時即東經120°標準時替代。從北平地方平時改為東經120°標準時,兩者相差了352秒。
from datetime import datetime
import pytz
now = datetime.now()
print(now)
tz = pytz.timezone('Asia/Shanghai')
print(now.replace(tzinfo=tz))
2016-09-14 10:29:20.200000
2016-09-14 10:29:20.200000+08:06
夏令时处理
dateutil模块
parser.parse()
from dateutil import parser
print(parser.parse("8th March,2004"))
print(parser.parse("8 March,2004"))
print(parser.parse("March 8th,2004"))
print(parser.parse("March 8,2004"))
print(parser.parse("2016-09-14"))
print(parser.parse("20160914"))
print(parser.parse("2016/09/14"))
print(parser.parse("09/14/2016"))
print(parser.parse("09,14"))
print(parser.parse("12:00:00"))
print(parser.parse("Wed, Nov 12"))
2004-03-08 00:00:00
2004-03-08 00:00:00
2004-03-08 00:00:00
2004-03-08 00:00:00
2016-09-14 00:00:00
2016-09-14 00:00:00
2016-09-14 00:00:00
2016-09-14 00:00:00
2016-09-09 00:00:00
2016-09-14 12:00:00
2016-11-12 00:00:00
rrule.rrule()
freq:可以理解为单位。可以是 YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY。即年月日周时分秒。 dtstart,until:是开始和结束时间。 wkst:周开始时间。 interval:间隔。 count:指定生成多少个。 byxxx:指定匹配的周期。比如byweekday=(MO,TU)则只有周一周二的匹配。byweekday可以指定MO,TU,WE,TH,FR,SA,SU。即周一到周日。
Arrow
UTC 时间
import arrow
utc = arrow.utcnow()
print(utc)
print(utc.to('local'))
当地时间
import arrow
now = arrow.now()
print(now)
print(now.to('UTC'))
解析时间
import arrow
d1 = arrow.get('2012-06-05 16:20:03', 'YYYY-MM-DD HH:mm:ss')
print(d1)
d2 = arrow.get(1504384602)
print(d2)
Unix 时间戳
import arrow
utc = arrow.utcnow()
print(utc)
unix_time = utc.timestamp
print(unix_time)
date = arrow.Arrow.fromtimestamp(unix_time)
print(date)
import arrow
utc = arrow.utcnow()
print(utc.format('X'))
格式化日期和时间
import arrow
now = arrow.now()
year = now.format('YYYY')
print("Year: {0}".format(year))
date = now.format('YYYY-MM-DD')
print("Date: {0}".format(date))
date_time = now.format('YYYY-MM-DD HH:mm:ss')
print("Date and time: {0}".format(date_time))
date_time_zone = now.format('YYYY-MM-DD HH:mm:ss ZZ')
print("Date and time and zone: {0}".format(date_time_zone))

转换为区域时间
import arrow
utc = arrow.utcnow()
print(utc.to('US/Pacific').format('HH:mm:ss'))
print(utc.to('Europe/Bratislava').format('HH:mm:ss'))
print(utc.to('Europe/Moscow').format('HH:mm:ss'))
工作日
import arrow
d1 = arrow.get('1948-12-13')
print(d1.weekday())
print(d1.format('dddd'))
移动时间
import arrow
now = arrow.now()
print(now.shift(hours=5).time())
print(now.shift(days=5).date())
print(now.shift(years=-8).date())
夏令时
import arrow
now = arrow.now()
print(now.format("YYYY-MM-DD HH:mm:ss ZZ"))
print(now.dst())
人性化的日期和时间
import arrow
now = arrow.now()
d1 = now.shift(minutes=-15).humanize()
print(d1)
d2 = now.shift(hours=5).humanize()
print(d2)
ISO 8601类
>>> import dateutil.parser
>>> dateutil.parser.parse('2008-09-03T20:56:35.450686Z') # RFC 3339 format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686, tzinfo=tzutc())
>>> dateutil.parser.parse('2008-09-03T20:56:35.450686') # ISO 8601 extended format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
>>> dateutil.parser.parse('20080903T205635.450686') # ISO 8601 basic format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
>>> dateutil.parser.parse('20080903') # ISO 8601 basic format, date only
datetime.datetime(2008, 9, 3, 0, 0)
>>> datetime.datetime.strptime("2008-09-03T20:56:35.450686Z", "%Y-%m-%dT%H:%M:%S.%fZ")
公历转农历:https://pypi.python.org/pypi/LunarSolarConverter/ 口语化日期:https://github.com/scrapinghub/dateparser Moment:https://github.com/zachwill/moment Delorean:https://github.com/myusuf3/delorean When:https://whenpy.readthedocs.io/en/latest/ Pendulum:https://pendulum.eustace.io/ 时间机器:https://github.com/spulec/freezegun 工作日历:https://github.com/peopledoc/workalendar 中国法定节假日:https://github.com/NateScarlet/holiday-cn
零基础学 Python,来这里
只需7天时间,跨进Python编程大门,已有3800+加入
【基础】0基础入门python,24小时有人快速解答问题;
【提高】40多个项目实战,老手可以从真实场景中学习python;
【直播】不定期直播项目案例讲解,手把手教你如何分析项目;
【分享】优质python学习资料分享,让你在最短时间获得有价值的学习资源;圈友优质资料或学习分享,会不时给予赞赏支持,希望每个优质圈友既能赚回加入费用,也能快速成长,并享受分享与帮助他人的乐趣。
【人脉】收获一群志同道合的朋友,并且都是python从业者
【价格】本着布道思想,只需 69元 加入一个能保证学习效果的良心圈子。【赠予】后续圈主将开发python,0基础入门在线课程,免费送给圈友们,供巩固和系统化复习
(三重福利)最近入圈送大礼包:
1、2.7G、308份最新数据分析报告
2、40G 人工智能算法 视频课
3、Python爬虫课,共14课
更多精彩
在公众号后台对话框输入以下关键词
查看更多优质内容!
PM2.5 | 世界杯 | 惊喜 | 附书代码
转载 / 投稿请联系:data_circle_yoni
优秀的读者都知道,“点赞”传统美德不能丢





