python time、datetime模組學習使用__python

來源:互聯網
上載者:User
    在做題的時候遇上幾個題目需要將Timestamp、Datetime、UTC幾個時間之間做轉換,正好之前瞭解到python提供了極為便捷強大的時間處理模組,掌握好了用起來就會很方便,在這裡花一點時間專門在網上搜集的資料,整理一下,內容來源於網上,放在這裡,最主要是作為學習的記錄,方便以後用到的時候不需要費力再去耗費時間去查詢了,也希望能給需要的朋友提供方便,給出來了參考的來源,如果需要還可以直接去源網站去學習:
#!/usr/bin/env python#encoding:utf-8'''參考來源:http://www.jb51.net/article/111303.htmhttp://www.jb51.net/article/31129.htmhttp://www.jb51.net/article/63654.htmhttp://www.jb51.net/article/67828.htm功能:Python的時間模組datetime學習使用介紹:Python提供了多個內建模組用於操作日期時間,像calendar,time,datetimedatetime模組定義了兩個常量:datetime.MINYEAR和datetime.MAXYEAR,分別表示datetime所能表示的最小、最大年份。其中,MINYEAR = 1,MAXYEAR = 9999。datetime模組定義了5個類,分別是1.datetime.date:表示日期的類2.datetime.datetime:表示日期時間的類3.datetime.time:表示時間的類4.datetime.timedelta:表示時間間隔,即兩個時間點的間隔5.datetime.tzinfo:時區的相關資訊-----------------------------------------------------------------------------------------一、首先看一下datetime.date類:date類有三個參數,datetime.date(year,month,day),返回year-month-day方法:1.datetime.date.ctime(),返回格式如 Sun Apr 16 00:00:00 20172.datetime.date.fromtimestamp(timestamp),根據給定的時間戮,返回一個date對象;datetime.date.today()作用相同3.datetime.date.isocalendar():返回格式如(year,month,day)的元組,(2017, 15, 6)4.datetime.date.isoformat():返回格式如YYYY-MM-DD5.datetime.date.isoweekday():返回給定日期的星期(0-6),星期一=0,星期日=66.datetime.date.replace(year,month,day):替換給定日期,但不改變原日期7.datetime.date.strftime(format):把日期時間按照給定的format進行格式化。8.datetime.date.timetuple():返回日期對應的time.struct_time對象time.struct_time(tm_year=2017, tm_mon=4, tm_mday=15, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=105, tm_isdst=-1)9.datetime.date.weekday():返回日期的星期python中時間日期格式化符號:%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 當前時區的名稱%% %號本身二、看一下datetime的time類time類有5個參數,datetime.time(hour,minute,second,microsecond,tzoninfo),返回08:29:301.datetime.time.replace()2.datetime.time.strftime(format):按照format格式返回時間3.datetime.time.tzname():返回時區名字4.datetime.time.utcoffset():返回時區的時間位移量三、datetime的datetime類datetime類有很多參數,datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]),返回年月日,時分秒datetime.datetime.ctime()datetime.datetime.now().date():返回當前日期時間的日期部分datetime.datetime.now().time():返回當前日期時間的時間部分datetime.datetime.fromtimestamp()datetime.datetime.now():返回當前系統時間datetime.datetime.replace()datetime.datetime.strftime():由日期格式轉化為字串格式datetime.datetime.now().strftime('%b-%d-%Y %H:%M:%S')'Apr-16-2017 21:01:35'datetime.datetime.strptime():由字串格式轉化為日期格式datetime.datetime.strptime('Apr-16-2017 21:01:35', '%b-%d-%Y %H:%M:%S')2017-04-16 21:01:35四、datetime的timedelta類datetime.datetime.timedelta用於計算兩個日期之間的差值'''from datetime import * import time print 'date.max:', date.max print 'date.min:', date.min print 'date.today():', date.today() print 'date.fromtimestamp():', date.fromtimestamp(time.time()) now = date(2010, 04, 06) tomorrow = now.replace(day = 07) print 'now:', now, ', tomorrow:', tomorrow print 'timetuple():', now.timetuple() print 'weekday():', now.weekday() print 'isoweekday():', now.isoweekday() print 'isocalendar():', now.isocalendar() print 'isoformat():', now.isoformat() '''date還對某些操作進行了重載,它允許我們對日期進行如下一些操作: •date2 = date1 + timedelta # 日期加上一個間隔,返回一個新的日期對象(timedelta將在下面介紹,表示時間間隔) •date2 = date1 - timedelta # 日期隔去間隔,返回一個新的日期對象 •timedelta = date1 - date2 # 兩個日期相減,返回一個時間間隔對象 •date1 < date2 # 兩個日期進行比較 註:對日期進行操作時,要防止日期超出它所能表示的範圍。 '''now = date.today() tomorrow = now.replace(day = 7) delta = tomorrow - now print 'now:', now, ' tomorrow:', tomorrow print 'timedelta:', delta print now + delta print tomorrow > now '''Time類 time類表示時間,由時、分、秒以及微秒組成。(我不是從火星來的~~)time類的建構函式如下: class datetime.time(hour[, minute[, second[, microsecond[, tzinfo]]]]) :各參數的意義不作解釋,這裡留意一下參數tzinfo,它表示時區資訊。注意一下各參數的取值範圍:hour的範圍為[0, 24),minute的範圍為[0, 60),second的範圍為[0, 60),microsecond的範圍為[0, 1000000)。 time類定義的類屬性: •time.min、time.max:time類所能表示的最小、最大時間。其中,time.min = time(0, 0, 0, 0), time.max = time(23, 59, 59, 999999); •time.resolution:時間的最小單位,這裡是1微秒; time類提供的執行個體方法和屬性: •time.hour、time.minute、time.second、time.microsecond:時、分、秒、微秒; •time.tzinfo:時區資訊; •time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]]):建立一個新的時間對象,用參數指定的時、分、秒、微秒代替原有對象中的屬性(原有對象仍保持不變); •time.isoformat():返回型如"HH:MM:SS"格式的字串表示; •time.strftime(fmt):返回自訂格式化字串'''from datetime import * tm = time(23, 46, 10) print 'tm:', tm print 'hour: %d, minute: %d, second: %d, microsecond: %d' % (tm.hour, tm.minute, tm.second, tm.microsecond) tm1 = tm.replace(hour = 20) print 'tm1:', tm1 print 'isoformat():', tm.isoformat() '''datetime類 datetime是date與time的結合體,包括date與time的所有資訊。它的建構函式如下:datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]),各參數的含義與date、time的建構函式中的一樣,要注意參數值的範圍。 datetime類定義的類屬性與方法: •datetime.min、datetime.max:datetime所能表示的最小值與最大值; •datetime.resolution:datetime最小單位; •datetime.today():返回一個表示當前本地時間的datetime對象; •datetime.now([tz]):返回一個表示當前本地時間的datetime對象,如果提供了參數tz,則擷取tz參數所指時區的本地時間; •datetime.utcnow():返回一個當前utc時間的datetime對象; •datetime.fromtimestamp(timestamp[, tz]):根據時間戮建立一個datetime對象,參數tz指定時區資訊; •datetime.utcfromtimestamp(timestamp):根據時間戮建立一個datetime對象; •datetime.combine(date, time):根據date和time,建立一個datetime對象; •datetime.strptime(date_string, format):將格式字串轉換為datetime對象; '''from datetime import * 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.year、month、day、hour、minute、second、microsecond、tzinfo: •datetime.date():擷取date對象; •datetime.time():擷取time對象; •datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]): •datetime.timetuple() •datetime.utctimetuple() •datetime.toordinal() •datetime.weekday() •datetime.isocalendar() •datetime.isoformat([sep]) •datetime.ctime():返回一個日期時間的C格式字串,等效於time.ctime(time.mktime(dt.timetuple())); •datetime.strftime(format) 像date一樣,也可以對兩個datetime對象進行比較,或者相減返回一個時間間隔對象,或者日期時間加上一個間隔返回一個新的日期時間對象。這裡不提供詳細的例子,看客自己動手試一下~~ 格式字串 datetime、date、time都提供了strftime()方法,該方法接收一個格式字串,輸出日期時間的字串表示。下表是從python手冊中拉過來的,我對些進行了簡單的翻譯(翻譯的有點噢口~~)。 格式字元 意義 %a星期的簡寫。如 星期三為Web %A星期的全寫。如 星期三為Wednesday %b月份的簡寫。如4月份為Apr %B月份的全寫。如4月份為April %c: 日期時間的字串表示。(如: 04/07/10 10:43:39) %d: 日在這個月中的天數(是這個月的第幾天) %f: 微秒(範圍[0,999999]) %H: 小時(24小時制,[0, 23]) %I: 小時(12小時制,[0, 11]) %j: 日在年中的天數 [001,366](是當年的第幾天) %m: 月份([01,12]) %M: 分鐘([00,59]) %p: AM或者PM %S: 秒(範圍為[00,61],為什麼不是[00, 59],參考python手冊~_~) %U: 周在當年的周數當年的第幾周),星期天作為周的第一天 %w: 今天在這周的天數,範圍為[0, 6],6表示星期天 %W: 周在當年的周數(是當年的第幾周),星期一作為周的第一天 %x: 日期文字(如:04/07/10) %X: 時間字串(如:10:43:39) %y: 2個數字表示的年份 %Y: 4個數字表示的年份 %z: 與utc時間的間隔 (如果是本地時間,返回Null 字元串) %Z: 時區名稱(如果是本地時間,返回Null 字元串) %%: %% => % '''dt = datetime.now() print '(%Y-%m-%d %H:%M:%S %f): ', dt.strftime('%Y-%m-%d %H:%M:%S %f') print '(%Y-%m-%d %H:%M:%S %p): ', dt.strftime('%y-%m-%d %I:%M:%S %p') print '%%a: %s ' % dt.strftime('%a') print '%%A: %s ' % dt.strftime('%A') print '%%b: %s ' % dt.strftime('%b') print '%%B: %s ' % dt.strftime('%B') print '日期時間%%c: %s ' % dt.strftime('%c') print '日期%%x:%s ' % dt.strftime('%x') print '時間%%X:%s ' % dt.strftime('%X') print '今天是這周的第%s天 ' % dt.strftime('%w') print '今天是今年的第%s天 ' % dt.strftime('%j') print '今周是今年的第%s周 ' % dt.strftime('%U') #Python中datetime常用時間處理方法import datetime# 擷取目前時間d1 = datetime.datetime.now()print d1# 目前時間加上半小時d2 = d1 + datetime.timedelta(hours=0.5)print d2# 格式化字串輸出d3 = d2.strftime('%Y-%m-%d %H:%M:%S')print d3# 將字串轉化為時間類型# d4 = datetime.datetime.strptime(date,'%Y-%m-%d %H:%M:%S.%f')# print d4#擷取本周和本月第一天的日期:def first_day_of_month():  '''  擷取本月第一天  :return:  '''  # now_date = datetime.datetime.now()  # return (now_date + datetime.timedelta(days=-now_date.day + 1)).replace(hour=0, minute=0, second=0,  # microsecond=0)  return datetime.date.today() - datetime.timedelta(days=datetime.datetime.now().day - 1)def first_day_of_week():  '''  擷取本周第一天  :return:  '''  return datetime.date.today() - datetime.timedelta(days=datetime.date.today().weekday())#now方法有個參數tz,設定時區類型。如果沒有和方法today的效果一樣now = datetime.datetime.now()#UTC時間datetime.datetime.utcnow()attrs = [("year","年"),('month',"月"),("day","日"),('hour',"小時"),( 'minute',"分"),( 'second',"秒"),( 'microsecond',"毫秒"),('min',"最小"),( 'max',"最大"),]for k,v in attrs:  "now.%s = %s #%s" % (k,getattr(now, k),v)if __name__ == "__main__":  this_week = first_day_of_week()  last_week = this_week - datetime.timedelta(days=7)  this_month = first_day_of_month()  last_month = this_month - datetime.timedelta(days=(this_month - datetime.timedelta(days=1)).day)  print this_week  print last_week  print this_month  print last_month

簡單跑一下結果:

date.max: 9999-12-31date.min: 0001-01-01date.today(): 2017-04-19date.fromtimestamp(): 2017-04-19now: 2010-04-06 , tomorrow: 2010-04-07timetuple(): time.struct_time(tm_year=2010, tm_mon=4, tm_mday=6, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=96, tm_isdst=-1)weekday(): 1isoweekday(): 2isocalendar(): (2010, 14, 2)isoformat(): 2010-04-06now: 2017-04-19  tomorrow: 2017-04-07timedelta: -12 days, 0:00:002017-04-07Falsetm: 23:46:10hour: 23, minute: 46, second: 10, microsecond: 0tm1: 20:46:10isoformat(): 23:46:10datetime.max: 9999-12-31 23:59:59.999999datetime.min: 0001-01-01 00:00:00datetime.resolution: 0:00:00.000001today(): 2017-04-19 09:48:00.346997now(): 2017-04-19 09:48:00.347013utcnow(): 2017-04-19 01:48:00.347024fromtimestamp(tmstmp): 2017-04-19 09:48:00.347030utcfromtimestamp(tmstmp): 2017-04-19 01:48:00.347041(%Y-%m-%d %H:%M:%S %f):  2017-04-19 09:48:00 347047(%Y-%m-%d %H:%M:%S %p):  17-04-19 09:48:00 AM%a: Wed %A: Wednesday %b: Apr %B: April 日期時間%c: Wed Apr 19 09:48:00 2017 日期%x:04/19/17 時間%X:09:48:00 今天是這周的第3天 今天是今年的第109天 今周是今年的第16周 2017-04-19 09:48:00.3471962017-04-19 10:18:00.3471962017-04-19 10:18:002017-04-172017-04-102017-04-012017-03-01


接下來這個是幾個時間的轉換程式,來自於http://www.jb51.net/article/63654.htm在這裡只是出於學習的目的,作為自己的代碼筆記:
 
#coding=utf-8'''python Timestamp、Datetime、UTC時間之間轉換練習'''import timeimport datetime#一、Datetime轉化為TimeStampdef datetime2timestamp(dt, convert_to_utc=False):  ''' Converts a datetime object to UNIX timestamp in milliseconds. '''  if isinstance(dt, datetime.datetime):    if convert_to_utc: # 是否轉化為UTC時間      dt = dt + datetime.timedelta(hours=-8) # 中國預設時區    timestamp = total_seconds(dt - EPOCH)    return long(timestamp)  return dt#二、TimeStamp轉化為Datetimedef timestamp2datetime(timestamp, convert_to_local=False):  ''' Converts UNIX timestamp to a datetime object. '''  if isinstance(timestamp, (int, long, float)):    dt = datetime.datetime.utcfromtimestamp(timestamp)    if convert_to_local: # 是否轉化為本地時間      dt = dt + datetime.timedelta(hours=8) # 中國預設時區    return dt  return timestamp#三、當前UTC時間的TimeStampdef timestamp_utc_now():  return datetime2timestamp(datetime.datetime.utcnow())#四、當前本地時間的TimeStampdef timestamp_now():  return datetime2timestamp(datetime.datetime.now())#五、UTC時間轉化為本地時間# 需要安裝python-dateutil# Ubuntu下:sudo apt-get install python-dateutil# 或者使用PIP:sudo pip install python-dateutilfrom dateutil import tzfrom dateutil.tz import tzlocalfrom datetime import datetime # get local time zone nameprint datetime.now(tzlocal()).tzname() # UTC Zonefrom_zone = tz.gettz('UTC')# China Zoneto_zone = tz.gettz('CST') utc = datetime.utcnow() # Tell the datetime object that it's in UTC time zoneutc = utc.replace(tzinfo=from_zone) # Convert time zonelocal = utc.astimezone(to_zone)print datetime.strftime(local, "%Y-%m-%d %H:%M:%S")# def get_prev_timestamp(tart_ts, interval = 3):#     start_array = datetime.datetime.utcfromtimestamp(start_ts)#     start_array = start_array + datetime.timedelta(hours=8)#     prev_time = (start_array - datetime.timedelta(days = interval))#     prev_ts = int(time.mktime(prev_time.timetuple()))#     return prev_ts# def get_end_timestamp(start_ts, interval = 30):#     start_date = datetime.datetime.utcfromtimestamp(start_ts)#     start_date = start_date + datetime.timedelta(hours=8)#     end_date = start_date + datetime.timedelta(minutes = interval)#     end_ts = int(time.mktime(end_date.timetuple()))#     return end_ts# def get_seven_day_ago( day = 7):#     human = {'d':86400 }#     now = int(time.time())#     ts = now - day * human['d']#     return str(ts)# start_ts = time.time()# print get_seven_day_ago()

簡單跑一下結果:

CST
2017-04-19 09:50:02  

       感覺datetime模組很強大,在python項目中經常會用到的,熟練地掌握一些極為有用的函數在以後的工作中對於工作效率的提升協助是很大的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.