[TOC]
## time & datetime 模塊
在Python中,與時間處理有關的模塊就包括:time、datetime。
### 前言
#### **Python中表示時間的方式**
1. 時間戳
2. 格式化的時間字符串
3. 元組(struct\_time)共九個元素。
#### **幾個時間概念定義**
* UTC(Coordinated Universal Time,世界協調時)
亦即格林威治天文時間,世界標準時間。在中國為UTC+8。DST(Daylight Saving Time)即夏令時。
* 時間戳(timestamp)的方式
通常來說,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。
我們運行“type(time.time())”,返回的是float類型。
* 元組(struct_time)方式:
struct_time元組共有9個元素,返回struct\_time的函數主要有gmtime(),localtime(),strptime():
#### **字符串轉時間格式對應表**
|符號 | 意義 | 補充說明 |
| --- | --- | --- |
|%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] |
|%U: | 當年第幾周 | 星期天作為周的第一天|
|%w: | 當周第幾天 | 范圍為[0, 6],6表示星期天 |
|%W: | 當年第幾周| 星期一作為周的第一天 |
|%x: | 日期字符串| 如:04/07/10 |
|%X: | 時間字符串| 如:10:43:39 |
|%y: | 2個數字表示的年份| 19 |
|%Y: | 4個數字表示的年份| 2019 |
|%z: | 與utc時間的間隔 | 如果是本地時間,返回空字符串 |
|%Z: | 時區名稱| 如果是本地時間,返回空字符串 |
|%%: | %% => %|
| 索引(Index) | 屬性(Attribute) | 值(Values) |
| --- | --- | --- |
| 0 | tm_year(年)| 比如2011 |
| 1 | tm_mon(月)| 1 - 12|
| 2 | tm_mday(日)| 1 - 31|
| 3 | tm_hour(時) | 0 - 23|
| 4 | tm_min(分) | 0 - 59|
| 5 | tm_sec(秒)| 0 - 61|
| 6 | tm_wday(weekday)| 0 - 6(0表示周日)|
| 7 | tm_yday(一年中的第幾天)| 1 - 366|
| 8 | tm_isdst(是否是夏令時)| 默認為-1|
## time模塊
### `time.localtime([secs])`
將一個時間戳轉換為當前時區的struct_time。secs參數未提供,則以當前時間為準。
```
>>> time.localtime()
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=20, tm_hour=13, tm_min=21, tm_sec=31, tm_wday=6, tm_yday=20, tm_isdst=0)
>>> time.localtime(123456789)
time.struct_time(tm_year=1973, tm_mon=11, tm_mday=30, tm_hour=5, tm_min=33, tm_sec=9, tm_wday=4, tm_yday=334, tm_isdst=0)
```
### `time.gmtime([secs])`
和localtime()方法類似,gmtime()方法是將一個時間戳轉換為UTC時區(0時區)的struct_time。
```
>>> `time.gmtime()
`
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=20, tm_hour=5, tm_min=26, tm_sec=53, tm_wday=6, tm_yday=20, tm_isdst=0)
>>> time.gmtime(123456789)
time.struct_time(tm_year=1973, tm_mon=11, tm_mday=29, tm_hour=21, tm_min=33, tm_sec=9, tm_wday=3, tm_yday=333, tm_isdst=0)
```
### `time.time()`
返回當前時間的時間戳。
```
>>> time.time()
1547962066.9111545
```
### `time.mktime(t)`
將一個struct_time轉化為時間戳。
```
>>> time.mktime((2019,2,17,17,3,38,1,48,0))
1550394218.0
```
### `time.sleep(secs)`
線程推遲指定的時間運行。單位為秒。
```
>>> print(time.ctime());time.sleep(3);print(time.ctime())
Sun Jan 20 13:39:45 2019
Sun Jan 20 13:39:48 2019
```
### `time.asctime([t])`
把一個表示時間的元組或者struct_time表示為這種形式:'Sun Oct 1 12:04:38 2017'。如果沒有參數,將會將time.localtime()作為參數傳入。
```
>>> time.asctime()
'Sun Jan 20 13:44:08 2019'
>>> time.asctime((2019,2,17,17,3,38,1,48,0))
'Tue Feb 17 17:03:38 2019'
```
### `time.ctime([secs])`
把一個時間戳(按秒計算的浮點數)轉化為time.asctime()的形式。如果參數未給或者為None的時候,將會默認time.time()為參數。它的作用相當于`time.asctime(time.localtime(secs))`。
```
'Sun Jan 20 13:46:37 2019'
>>> time.ctime(1547963185.4658437)
'Sun Jan 20 13:46:25 2019'
```
### **`time.strftime(format[, t])`**
把一個代表時間的元組或者struct_time(如由time.localtime()和time.gmtime()返回)轉化為格式化的時間字符串。如果t未指定,將傳入time.localtime()。
```
>>> time.strftime("%Y-%m-%d %X", time.localtime())
'2019-01-20 13:49:39'
>>> time.strftime("%Y-%m-%d %X", (2019,2,17,17,3,38,1,48,0))
'2019-02-17 17:03:38'
```
### `time.strptime(string[, format]`
把一個格式化時間字符串轉化為struct_time。實際上它和strftime()是逆操作。
```
>>> time.strptime('2019-10-3 17:54',"%Y-%m-%d %H:%M")
time.struct_time(tm_year=2019, tm_mon=10, tm_mday=3, tm_hour=17, tm_min=54, tm_sec=0, tm_wday=3, tm_yday=276, tm_isdst=-1)
```
### **總結:時間關系轉換圖**

## datetime模塊
相比于time模塊,datetime模塊的接口則更直觀、更容易調用
### datetime模塊定義了下面這幾個類
* datetime.date:表示日期的類。常用的屬性有year, month, day;
* datetime.time:表示時間的類。常用的屬性有hour, minute, second, microsecond;
* datetime.datetime:表示日期時間。
* datetime.timedelta:表示時間間隔。即兩個時間點之間的長度。
* datetime.tzinfo:與時區有關的相關信息
### `datetime.datetime.now() `
返回當前的datetime日期類型,有很多后續方法可以調用
```
d=datetime.datetime.now()
>>> d
datetime.datetime(2019, 1, 20, 14, 22, 31, 209699)
>>> d.ctime()
'Sun Jan 20 14:22:31 2019'
>>> d.timestamp()
1547965351.209699
>>> d.time()
datetime.time(14, 22, 31, 209699)
>>> d.day
20
>>> d.year
2019
>>> d.timetuple()
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=20, tm_hour=14, tm_min=22, tm_sec=31, tm_wday=6, tm_yday=20, tm_isdst=-1)
```
### `datetime.date.fromtimestamp(時間戳) `
把一個時間戳轉為datetime日期類型
```
>>> datetime.date.fromtimestamp(1547965351.209699)
datetime.date(2019, 1, 20)
```
### 時間運算
```
>>> datetime.datetime.now()
datetime.datetime(2017, 10, 1, 12, 53, 11, 821218)
>>> datetime.datetime.now() + datetime.timedelta(4) #當前時間 +4天
datetime.datetime(2017, 10, 5, 12, 53, 35, 276589)
>>> datetime.datetime.now() + datetime.timedelta(hours=4) #當前時間+4小時
datetime.datetime(2017, 10, 1, 16, 53, 42, 876275)```
```
### 時間替換
```
>>> d.replace(year=2999,month=11,day=30)
datetime.date(2999, 11, 30)
```
- 基礎部分
- 基礎知識
- 變量
- 數據類型
- 數字與布爾詳解
- 列表詳解list
- 字符串詳解str
- 元組詳解tup
- 字典詳解dict
- 集合詳解set
- 運算符
- 流程控制與循環
- 字符編碼
- 編的小程序
- 三級菜單
- 斐波那契數列
- 漢諾塔
- 文件操作
- 函數相關
- 函數基礎知識
- 函數進階知識
- lambda與map-filter-reduce
- 裝飾器知識
- 生成器和迭代器
- 琢磨的小技巧
- 通過operator函數將字符串轉換回運算符
- 目錄規范
- 異常處理
- 常用模塊
- 模塊和包相關概念
- 絕對導入&相對導入
- pip使用第三方源
- time&datetime模塊
- random隨機數模塊
- os 系統交互模塊
- sys系統模塊
- shutil復制&打包模塊
- json&pickle&shelve模塊
- xml序列化模塊
- configparser配置模塊
- hashlib哈希模塊
- subprocess命令模塊
- 日志logging模塊基礎
- 日志logging模塊進階
- 日志重復輸出問題
- re正則表達式模塊
- struct字節處理模塊
- abc抽象類與多態模塊
- requests與urllib網絡訪問模塊
- 參數控制模塊1-optparse-過時
- 參數控制模塊2-argparse
- pymysql數據庫模塊
- requests網絡請求模塊
- 面向對象
- 面向對象相關概念
- 類與對象基礎操作
- 繼承-派生和組合
- 抽象類與接口
- 多態與鴨子類型
- 封裝-隱藏與擴展性
- 綁定方法與非綁定方法
- 反射-字符串映射屬性
- 類相關內置方法
- 元類自定義及單例模式
- 面向對象的軟件開發
- 網絡-并發編程
- 網絡編程SOCKET
- socket簡介和入門
- socket代碼實例
- 粘包及粘包解決辦法
- 基于UDP協議的socket
- 文件傳輸程序實戰
- socketserver并發模塊
- 多進程multiprocessing模塊
- 進程理論知識
- 多進程與守護進程
- 鎖-信號量-事件
- 隊列與生產消費模型
- 進程池Pool
- 多線程threading模塊
- 進程理論和GIL鎖
- 死鎖與遞歸鎖
- 多線程與守護線程
- 定時器-條件-隊列
- 線程池與進程池(新方法)
- 協程與IO模型
- 協程理論知識
- gevent與greenlet模塊
- 5種網絡IO模型
- 非阻塞與多路復用IO實現
- 帶著目標學python
- Pycharm基本使用
- 爬蟲
- 案例-爬mzitu美女
- 案例-爬小說
- beautifulsoup解析模塊
- etree中的xpath解析模塊
- 反爬對抗-普通驗證碼
- 反爬對抗-session登錄
- 反爬對抗-代理池
- 爬蟲技巧-線程池
- 爬蟲對抗-圖片懶加載
- selenium瀏覽器模擬