我们会经常遇到对时间的处理,用python来进行时间处理简直不要太方便了,这一期就给大家介绍一下python的时间处理!
用python进行时间处理主要会用到time,calendar,datetime及pandas这几个库,其中又以后两个最为常用。
这一期我们主要介绍一下用datetime库进行时间处理的常用操作。
1. datetime基础
1.1 获取当前时间
import time import datetime as dtm ## 用datetime获取当前时间 dtime = dtm.datetime.now() # dtm.datetime.utcnow() dtime # datetime.datetime(2018, 12, 15, 13, 1, 30, 200649) # 年、月、日、时、分、秒、微秒 dtime.year, dtime.month, dtime.day # (2018, 12, 15) dtm.datetime.strftime(dtm.datetime.now(), '%Y-%m-%d %H:%M:%S') # '2018-12-15 20:47:45' # 用time库获取当前时间: time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time( ))) # '2018-12-15 20:49:17' time.strftime("%Y-%m-%d %H:%M:%S") # '2018-12-15 20:50:11'
1.2 datetime基本操作
from datetime import datetime, date, time # Using datetime.combine() d = date(2005, 7, 14) t = time(12, 30) datetime.combine(d, t) datetime(2005, 7, 14, 12, 30) # datetime 类的方法: datetime.date() datetime.time() # 可以用str()直接将时间格式转化为字符串 dt = datetime(2005, 7, 14, 12, 30) # datetime(%Y,%m,%d,%H,%M,%S): # datetime共有6个参数,分别代表的是年月日时分秒。其中年月日是必须要传入的参数,时分秒可以不传入,默认全为零。 # > # Using datetime.timetuple() to get tuple of all attributes tt = dt.timetuple() for it in tt: print(it) # 2005 # year # 7 # month # 14 # day # 12 # hour # 30 # minute # 0 # second # 3 # weekday (0 = Monday, 6 = Sunday) # 195 # number of days since 1st January # -1 # dst - method tzinfo.dst() returned None #################################################### # 返回今天是周几 x='2018-05-27' int(dtm.datetime(int(x[ :4]),int(x[5:7]),int(x[8: ])).strftime('%w')) # 0 表示周日 dtm.datetime(2017, 1, 1).strftime("%w") # 0-6 SUN-SAT
2. 时间戳的转换
Unix时间戳: Unix 中常常使用一个数字记录时间,表示距离起始时间相差的秒数(根据系统的精度,时间单位有时毫秒,有时是纳秒)。大于 0 表示在起始时间之后,小于 0 就表示在起始时间之前。这个数字有时是浮点类型、有时是整数类型,但都称这个数字为 Unix 时间戳(Timestamp)
import time import datetime as dtm ## 获取当前时间 dtime = dtm.datetime.now() # dtm.datetime.utcnow() # 时间戳 ans_time = int(time.mktime(dtime.timetuple())) ans_time # 1535860540 # 时间戳的转换-1 t1 = datetime.datetime.fromtimestamp(ans_time) # local time t1 # datetime.datetime(2018, 9, 2, 11, 55, 40) # 也可以用time模块的localtime()方法: time.localtime(ans_time) # 时间戳的转换-2 t2 = datetime.datetime.utcfromtimestamp(ans_time) # utc time t2 # datetime.datetime(2018, 9, 2, 3, 55, 40) t2.strftime("%Y--%m--%d %H:%M:%S") # 2018--09--02 03:55:40 # 时间戳的转换-3 pd.to_datetime(ans_time,unit='s') # utc time # Timestamp('2018-09-02 03:55:40')
3. 时间格式的转换
- strftime 即 string format time,用来将时间格式化成字符串
- strptime 即 string parse time,用来将字符串解析成时间
import datetime as dtm start = dtm.datetime(2011,1,7,1,21,1) # datetime.datetime(2011, 1, 7, 1, 21, 1) start.strftime('%Y-%m-%d %H:%M:%S') # '2011-01-07 01:21:01' dtm.datetime.strptime('2011-01-07 01:21:01','%Y-%m-%d %H:%M:%S') # datetime.datetime(2011, 1, 7, 1, 21, 1) str(start) # '2011-01-07 01:21:01' start.strftime("%Y-%m-%d 00:00:00") # '2011-01-07 00:00:00' # The strftime method formats a datetime as a string: In [1]: dt.strftime('%m/%d/%Y %H:%M') Out[1]: '10/29/2011 20:30' # Strings can be converted (parsed) into datetime objects using the strptime function: In [2]: dtm.datetime.strptime('20091031', '%Y%m%d') Out[2]: datetime.datetime(2009, 10, 31, 0, 0) > z dtm.datetime(2012, 9, 23, 21, 37, 4, 177393) > nice_z = dtm.datetime.strftime(z, '%A %B %d, %Y') > nice_z 'Sunday September 23, 2012' # 字符串形式的时间格式转化为时间格式 dt = dtm.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M") # 时间格式转化为字符串 # time.strftime( '%Y-%m-%d' , time.localtime(time.time())) # > # Formatting datetime print(dt.strftime("%A, %d. %B %Y %I:%M%p")) # 'Tuesday, 21. November 2006 04:30PM' 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time") # 'The day is 21, the month is November, the time is 04:30PM.' ''' Datetime format specification: %Y Four-digit year %y Two-digit year %m Two-digit month [01, 12] %d Two-digit day [01, 31] %H Hour (24-hour clock) [00, 23] %I Hour (12-hour clock) [01, 12] %M Two-digit minute [00, 59] %S Second [00, 61] (seconds 60, 61 account for leap seconds) %w Weekday as integer [0 (Sunday), 6]
datetime.strptime解析时间需要输入相应的时间格式,而dateutil第三方库中的parser.parse方法则更加灵活。
dateutil.parser 有时候也会有一定的麻烦,比如 '42'会被解析为2042 年加上今天的日期:datetime.datetime(2042, 9, 1, 0, 0)
from dateutil.parser import parse parse('2011-01-03') # datetime.datetime(2011, 1, 3, 0, 0) parse('Jan 31, 1997 10:45 PM') # datetime.datetime(1997, 1, 31, 22, 45) parse('6/12/2011', dayfirst=True) # datetime.datetime(2011, 12, 6, 0, 0) # pandas: datestrs = ['2011-07-06 12:00:00', '2011-08-06 00:00:00'] pd.to_datetime(datestrs) # DatetimeIndex(['2011-07-06 12:00:00', '2011-08-06 00:00:00'], dtype='datetime64[ns]', freq=None)
4. Timedelta
timedelta 可以表示两个时间之间的时间差:
dtm.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
t1 = dtm.datetime(2018,7,12,15,6,9) t2 = dtm.datetime(2018,9,11,12,33,23) td = t2-t1 td # datetime.timedelta(60, 77234) td.days,td.seconds # (60, 77234) # 将timedelta转换为: day, hour, minute def parse_timedelta(td): """ transform timedelta to day, hour, minute """ return td.days, td.seconds//3600, (td.seconds//60)%60 parse_timedelta(td) # (60, 21, 27)
利用timedelta进行时间外推:
import datetime as dtm # 100天前的日期 (dtm.datetime.now() - dtm.timedelta(days = 100)).strftime("%Y-%m-%d") def TaftD(FORMAT_DATE,i): """ 返回几天后的时间 """ return (dtm.datetime.strptime(FORMAT_DATE, '%Y-%m-%d') + dtm.timedelta(days = i)).strftime('%Y-%m-%d') def TaftH(FORMAT_TIME,i): """ 返回几小时后的时间 """ return (dtm.datetime.strptime(FORMAT_TIME, '%Y-%m-%d %H:%M:%S') + dtm.timedelta(hours = i)).strftime('%Y-%m-%d %H:%M:%S') TaftD("2018-05-17", -2) # '2018-05-15' TaftH("2018-05-17 10:40:00", 2) # '2018-05-17 12:40:00'
这一期主要介绍了是datetime进行时间处理的一些常用操作,后续我们会介绍pandas中的一些时间处理的操作。欢迎点赞转发期待哦~
以上就是Python如何进行时间处理的详细内容,更多关于Python时间处理的资料请关注其它相关文章!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】