常見的有三種,日期元祖、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
月)。
|
%
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 當前時區的名稱
%
%
%
號本身