python時間函數與mysql時間函數轉換


常見的有三種,日期元祖、time與datetime

調用源碼如下:

 y=datetime.datetime(int(get_data[7][0:4]),int(get_data[7][4:6]),int(get_data[7][6:8]),int(get_data[8][0:2]),int(get_data[8][2:4]),int(get_data[8][4:6]),000000)
            y=datetime.datetime.now() + datetime.timedelta(seconds=2*int(get_data[16])-2) #比現在+2s
            y=datetime.datetime.now() + datetime.timedelta(microseconds=i*1000) #比現在+1ms
            starttime = "'"+str(y.year)+"-"+str(y.month)+"-"+str(y.day)+" "+str(y.hour)+":"+str(y.minute)+":"+str(y.second)+"."+str(y.microsecond)+"'"   
            #cv.line(src,(i - 3,100),(i + 5,900),(255,0,0),4)
            insert_lightning(file_name,"I",starttime,starttime,y_list[i],start_longitude,start_latitude,end_longitude,end_latitude,i,0,i,0)

datetime賦值函數如下:

  datetime(year,month,day,hour,min,seconds,microseconds)

日期元祖結構體:

日期元祖格式化:

%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 當前時區的名稱
%% %號本身

 
 

時間相關操作,時間有三種表示方式:

  • 時間戳               1970年1月1日之后的秒,即:time.time()
  • 格式化的字符串    2014-11-11 11:11,    即:time.strftime('%Y-%m-%d')
  • 結構化時間          元組包含了:年、日、星期等... time.struct_time    即:time.localtime()

 time.time()

1
2
3
4
5
返回當前時間的時間戳( 1970 紀元后經過的浮點秒數)。
時間戳單位最適於做日期運算。但是 1970 年之前的日期就無法以此表示了。太遙遠的日期也不行,UNIX和Windows只支持到 2038 年。
>>>  import   time
>>>  print (time.time())
1459999336.1963577

  

time.mktime(tupletime)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
接受時間元組並返回時間輟( 1970 紀元后經過的浮點秒數)。
Python time.mktime() 函數執行與gmtime(), localtime()相反的操作,它接收struct_time對象作為參數,返回用秒數來表示時間的浮點數。
如果輸入的值不是一個合法的時間,將觸發 OverflowError 或 ValueError。
#!/usr/bin/python3
import   time
 
t  =   ( 2016 ,  2 ,  17 ,  17 ,  3 ,  38 ,  1 ,  48 ,  0 )
secs  =   time.mktime( t )
print   ( "time.mktime(t) : %f"   %    secs)
print   ( "asctime(localtime(secs)): %s"   %   time.asctime(time.localtime(secs)))
 
以上實例輸出結果為:
time.mktime(t) :  1455699818.000000
asctime(localtime(secs)): Wed Feb  17   17 : 03 : 38   2016

  

time.gmtime([secs])

1
2
3
4
接收時間輟( 1970 紀元后經過的浮點秒數)並返回格林威治天文時間下的時間元組t。注:t.tm_isdst始終為 0
>>>  import   time
>>>  print   ( "gmtime :" , time.gmtime( 1455508609.34375 ))
gmtime : time.struct_time(tm_year = 2016 , tm_mon = 2 , tm_mday = 15 , tm_hour = 3 , tm_min = 56 , tm_sec = 49 , tm_wday = 0 , tm_yday = 46 , tm_isdst = 0 )

  

time.localtime([secs])

1
2
3
4
接收時間輟( 1970 紀元后經過的浮點秒數)並返回當地時間下的時間元組t(t.tm_isdst可取 0 1 ,取決於當地當時是不是夏令時)。
>>>  import   time
>>>  print   ( "localtime(): " , time.localtime( 1455508609.34375 ))
localtime():  time.struct_time(tm_year = 2016 , tm_mon = 2 , tm_mday = 15 , tm_hour = 11 , tm_min = 56 , tm_sec = 49 , tm_wday = 0 , tm_yday = 46 , tm_isdst = 0 )

  

time.mktime(tupletime)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
接受時間元組並返回時間輟( 1970 紀元后經過的浮點秒數)。
Python time mktime() 函數執行與gmtime(), localtime()相反的操作,它接收struct_time對象作為參數,返回用秒數來表示時間的浮點數。
如果輸入的值不是一個合法的時間,將觸發 OverflowError 或 ValueError。
#!/usr/bin/python3
import   time
 
t  =   ( 2016 ,  2 ,  17 ,  17 ,  3 ,  38 ,  1 ,  48 ,  0 )
secs  =   time.mktime( t )
print   ( "time.mktime(t) : %f"   %    secs)
print   ( "asctime(localtime(secs)): %s"   %   time.asctime(time.localtime(secs)))
 
以上實例輸出結果為:
time.mktime(t) :  1455699818.000000
asctime(localtime(secs)): Wed Feb  17   17 : 03 : 38   2016

  

time.strftime(fmt[,tupletime])

1
2
3
4
5
接收以時間元組,並返回以可讀字符串表示的當地時間,格式由fmt決定。
 
>>>  import   time
>>>  print   (time.strftime( "%Y-%m-%d %H:%M:%S" , time.localtime()))
2016 - 04 - 07   11 : 18 : 05

  

time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')

1
2
3
4
5
根據fmt的格式把一個時間字符串解析為時間元組。
>>>  import   time
>>> struct_time  =   time.strptime( "30 Nov 00" ,  "%d %b %y" )
>>>  print   ( "返回元組: " , struct_time)
返回元組:  time.struct_time(tm_year = 2000 , tm_mon = 11 , tm_mday = 30 , tm_hour = 0 , tm_min = 0 , tm_sec = 0 , tm_wday = 3 , tm_yday = 335 , tm_isdst = - 1 )

  

time.altzone

1
2
3
4
返回格林威治西部的夏令時地區的偏移秒數。如果該地區在格林威治東部會返回負值(如西歐,包括英國)。對夏令時啟用地區才能使用。
>>>  import   time
>>>  print   ( "time.altzone %d "   %   time.altzone)
time.altzone  - 28800

  

time.asctime([tupletime])

1
2
3
4
5
接受時間元組並返回一個可讀的形式為 "Tue Dec 11 18:07:14 2008" 2008 12 11 日 周二 18 07 14 秒)的 24 個字符的字符串。
>>>  import   time
>>> t  =   time.localtime()
>>>  print   ( "time.asctime(t): %s "   %   time.asctime(t))
time.asctime(t): Thu Apr   7   10 : 36 : 20   2016

  

time.clock()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
用以浮點數計算的秒數返回當前的CPU時間。用來衡量不同程序的耗時,比time.time()更有用。
#!/usr/bin/python3
import   time
 
def   procedure():
     time.sleep( 2.5 )
 
# time.clock
t0  =   time.clock()
procedure()
print   (time.clock()  -   t0)
 
# time.time
t0  =   time.time()
procedure()
print   (time.time()  -   t0)
以上實例輸出結果為:
5.000000000000143e - 05
2.5020556449890137

  

time.ctime([secs])

1
2
3
4
作用相當於asctime(localtime(secs)),未給參數相當於asctime()
>>>  import   time
>>>  print   ( "time.ctime() : %s"   %   time.ctime())
time.ctime() : Thu Apr   7   10 : 51 : 58   2016

  

time.sleep(secs)

1
2
3
4
5
6
7
推遲調用線程的運行,secs指秒數。
#!/usr/bin/python3
import   time
 
print   ( "Start : %s"   %   time.ctime())
time.sleep(  5   )
print   ( "End : %s"   %   time.ctime())

  

time.tzset()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
根據環境變量TZ重新初始化時間相關設置。
標准TZ環境變量格式:
std offset [dst [offset [,start[ / time], end[ / time]]]]
 
參數:
std 和 dst:三個或者多個時間的縮寫字母。傳遞給 time.tzname.
offset: 距UTC的偏移,格式: [ + | - ]hh[:mm[:ss]] {h = 0 - 23 , m / s = 0 - 59 }。
start[ / time], end[ / time]: DST 開始生效時的日期。格式為 m.w.d — 代表日期的月份、周數和日期。w = 1   指月份中的第一周,而 w = 5   指月份的最后一周。 'start'     'end'   可以是以下格式之一:
     Jn: 儒略日 n ( 1   < =   n < =   365 )。閏年日( 2 29 )不計算在內。
     n: 儒略日 ( 0   < =   n < =   365 )。 閏年日( 2 29 )計算在內
     Mm.n.d: 日期的月份、周數和日期。w = 1   指月份中的第一周,而 w = 5   指月份的最后一周。
     time:(可選)DST 開始生效時的時間( 24   小時制)。默認值為  02 : 00 (指定時區的本地時間)。
 
#!/usr/bin/python3
import   time
import   os
 
os.environ[ 'TZ' ]  =   'EST+05EDT,M4.1.0,M10.5.0'
time.tzset()
print   (time.strftime( '%X %x %Z' ))
 
os.environ[ 'TZ' ]  =   'AEST-10AEDT-11,M10.5.0,M3.5.0'
time.tzset()
print   (time.strftime( '%X %x %Z' ))
以上實例輸出結果為:
23 : 25 : 45   04 / 06 / 16   EDT
13 : 25 : 45   04 / 07 / 16   AEST

  

time.timezone

1
屬性time.timezone是當地時區(未啟動夏令時)距離格林威治的偏移秒數(> 0 ,美洲;< = 0 大部分歐洲,亞洲,非洲)。

  

time.tzname

1
屬性time.tzname包含一對根據情況的不同而不同的字符串,分別是帶夏令時的本地時區名稱,和不帶的。

  

時間裝換圖:

三. datetime模塊

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
print (datetime.now())   # 獲取當前時間 2015-03-29 16:23:20.618564
print (datetime.date.fromtimestamp(time.time() - 864400 ) )  #2016-01-16 將時間戳轉成日期格式
current_time  =   datetime.datetime.now()  #
print (current_time)  #輸出2016-01-26 19:04:30.335935
print (current_time.timetuple())  #返回struct_time格式
   
#datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
print (current_time.replace( 2014 , 9 , 12 ))  #輸出2014-09-12 19:06:24.074900,返回當前時間,但指定的值將被替換
   
str_to_date  =   datetime.datetime.strptime( "21/11/06 16:30" ,  "%d/%m/%y %H:%M" )  #將字符串轉換成日期格式
new_date  =   datetime.datetime.now()  +   datetime.timedelta(days = 10 )  #比現在加10天
new_date  =   datetime.datetime.now()  +   datetime.timedelta(days = - 10 )  #比現在減10天
new_date  =   datetime.datetime.now()  +   datetime.timedelta(hours = - 10 )  #比現在減10小時
new_date  =   datetime.datetime.now()  +   datetime.timedelta(seconds = 120 )  #比現在+120s
print (new_date)

  

  datetime轉換為timestamp

1
2
3
4
>>> from   datetime  import   datetime
>>> dt  =   datetime( 2017 , 3 , 29 , 12 , 20   # 用指定日期創建datetime
>>> dt.timestamp()   # 把datetime轉換為timestamp
1490761200.0

  在Python中的時間戳是一個浮點小數,如果有小數位,小數位表示毫秒數。其他如Java和JavaScript中的時間戳使用整數表示毫秒數,這種情況下只需要將時間戳除以1000就可以得到和Python一樣的浮點表示法。

  timestamp 轉換為 datetime

1
2
3
4
5
6
>>>  from   datetime  import   datetime
>>> t  =   1490761200.0
>>>  print (datetime.fromtimestamp(t))   # 本地時間轉換
2017 - 03 - 29   12 : 20 : 00
>>>  print (datetime.utcfromtimestamp(t))   # UTC時間轉換
2017 - 03 - 29   04 : 20 : 00

  str轉換為datetime

1
2
3
4
>>>  from   datetime  import   datetime
>>> cday  =   datetime.strptime( '2016-01-03 16:15:56' ,  '%Y-%m-%d %H:%M:%S' )
>>>  print (cday)
2016 - 01 - 03   16 : 15 : 56

  datetime轉換為str

1
2
3
4
>>>  from   datetime  import   datetime
>>> now   =   datetime.now()
>>>  print (now.strftime( '%a, %b %d %H:%M' ))
Wed, Mar  29   16 : 18

  

 

四. calendar模塊

  此模塊的函數都是日歷相關,星期一是每周的第一天,星期天是最后一天。

calendar.calendar(year,w=2,l=1,c=6)

1
返回一個多行字符串格式的year年年歷, 3 個月一行,間隔距離為c。 每日寬度間隔為w字符。每行長度為 21 *   W + 18 + 2 *   C。l是每星期行數。

calendar.firstweekday( )

1
返回當前每周起始日期的設置。默認情況下,首次載入caendar模塊時返回 0 ,即星期一。

calendar.isleap(year)

1
是閏年返回 True ,否則為false。

calendar.leapdays(y1,y2)

1
返回在Y1,Y2兩年之間的閏年總數。

calendar.month(year,month,w=2,l=1)

1
返回一個多行字符串格式的year年month月日歷,兩行標題,一周一行。每日寬度間隔為w字符。每行的長度為 7 *   w + 6 。l是每星期的行數。

calendar.monthcalendar(year,month)

1
返回一個整數的單層嵌套列表。每個子列表裝載代表一個星期的整數。Year年month月外的日期都設為 0 ;范圍內的日子都由該月第幾日表示,從 1 開始。

calendar.monthrange(year,month)

1
返回兩個整數。第一個是該月的星期幾的日期碼,第二個是該月的日期碼。日從 0 (星期一)到 6 (星期日);月從 1 12

calendar.prcal(year,w=2,l=1,c=6)

1
相當於  print   calendar.calendar(year,w,l,c).

calendar.prmonth(year,month,w=2,l=1)

1
相當於  print   calendar.calendar(year,w,l,c)。

calendar.setfirstweekday(weekday)

1
設置每周的起始日期碼。 0 (星期一)到 6 (星期日)。

calendar.timegm(tupletime)

1
和time.gmtime相反:接受一個時間元組形式,返回該時刻的時間輟( 1970 紀元后經過的浮點秒數)。

calendar.weekday(year,month,day)

1
返回給定日期的日期碼。 0 (星期一)到 6 (星期日)。月份為  1 (一月) 到  12 12 月)。

 

 
分類:   Python模塊
標簽:   python,   python3,   time,   datetime,   calendar
好文要頂   關注我   收藏該文    
1
0
 
 
 
« 上一篇:   Python3之paramiko模塊
» 下一篇:   Python3之requests模塊
posted @   2016-06-29 21:44    王永存ღ  閱讀( 7451)  評論( 0  編輯    收藏
% y 兩位數的年份表示( 00 - 99
% Y 四位數的年份表示( 000 - 9999
% m 月份( 01 - 12
% d 月內中的一天( 0 - 31
% 24 小時制小時數( 0 - 23
% 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 當前時區的名稱
% %  % 號本身


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM