找回密碼
 註冊
搜索
查看: 140|回復: 0

[教學] Python時間轉換介紹

[複製鏈接]
發表於 前天 23:10 | 顯示全部樓層 |閱讀模式
Push to Facebook
時間轉換
有時我們拿到的數據會類似這種形式:「2020年09月09號3:25PM」,一個字串,對於我們來說很好理解,一看就知道是什麼時間,但對於電腦來說,其實不然,因此Python有提供函數庫,讓我們在分析時間類別的數據時可以轉換成電腦能理解的型態。常用的函數庫

  1. import time
  2. import datetime
複製代碼

那麼time與datetime的差別在哪呢?簡單來說,datetime是time的進階版,它多增加了許多更方便的函數。

名詞介紹
時間戳(timestamp) : 以秒為單位的一個時間類型,起始時間為1970年1月1日0點0分0秒,因此假如現在是1970年1月1日12點0分0秒,所對應到的時間戳會為43200($12\times60\times60$),通常時間戳最常被拿來用作時間的分析,因為它的形式最為簡單,沒有什麼格式需要考量,它的缺點就是有範圍的限制,因為起始值是1970年,那麼1970年前就沒有時間戳了,而且它也有限制最大的年份大約在2262年。

時間元組(struct_time) : 這是一個由九個數值組裝起來的時間類型。如下表所示

位置
參數
意義
範圍
0
tm_year
西元年
四位數
1
tm_mon
月份
1~12
2
tm_day
日期
1~31
3
tm_hour
小時
0~23
4
tm_min
分鐘
0~59
5
tm_sec
秒數
0~59
6
tm_wday
星期
0~6
7
tm_yday
今年第幾天
1~366
8
tm_isdst
夏令時間
0 or 1 or -1
  1. import time # 引入time
  2. time.localtime() # 查看目前時間元組
複製代碼

時間格式
時間格式全部都是使用一個%,加上一個字母來代表,其中大小寫會有不同的意義,這裡舉一寫比較常使用到的引述作為舉例。

引述
代表
例子
%a
星期簡寫
Mon
%A
星期
Monday
%b
月份簡寫
Jan
%B
月份
January
%d
日期
31
%H
小時(24小時制)
23
%I
小時(12小時制)
12
%p
AM 或 PM
AM
%P
am 或 pm
am
%m
月份(十進制)
01
%M
分鐘
59
%S
秒數
59
%y
年份(沒有世紀)
99
%Y
年份(有世紀)
1999

時間格式(字串)改成時間戳
這種做法是在分析資料中最常用到的作法,因為當資料室字串的時候,我們無法直接使用字串來做運算或比較,最快也做方便的方式就是直接轉成時間戳,讓大家都變成一個數值,再作分析。
舉例 : 將字串"2020-09-09 19:00:00"轉換成時間戳的形式。
實作
  1. import time # 引入time
  2. timeString = "2020-09-09 19:00:00" # 時間格式為字串
  3. struct_time = time.strptime(timeString, "%Y-%m-%d %H:%M:%S") # 轉成時間元組
  4. time_stamp = int(time.mktime(struct_time)) # 轉成時間戳
  5. print(time_stamp)
複製代碼

時間戳改成時間格式(字串)
這個做法最常用在輸出資料的時候,當所有數據處理完,因為通常是用時間戳作分析,但是時間戳的形式,我們不能一眼馬上判斷是何時,所以需要轉化成想要或者規定的字串形式。
舉例 : 將時間戳1599678000轉換成"西元年-月份-日期 小時:分鐘:秒數"的形式。
實作
  1. import time # 引入time

  2. time_stamp = 1599678000 # 設定timeStamp
  3. struct_time = time.localtime(time_stamp) # 轉成時間元組
  4. timeString = time.strftime("%Y-%m-%d %H:%M:%S", struct_time) # 轉成字串
  5. print(timeString)
複製代碼
時間格式(字串)更改
時間格式的更改一定要透過時間元組的幫忙,先將原本的字串轉成時間元組,在將時間元組轉成新的字串。
舉例 : 將"2020-09-09 19:00:00"轉成"2020 Sep 09 07:00:00 PM"
實作
  1. import time # 引入time

  2. timeString = "2020-09-09 19:00:00" # 輸入原始字串
  3. struct_time = time.strptime(timeString, "%Y-%m-%d %H:%M:%S") # 轉成時間元組
  4. new_timeString = time.strftime("%Y %b %d %I:%M:%S %p", struct_time)
  5. print(new_timeString)
複製代碼
取得現在時間
取得後可經由轉換成想要的字串,作為其他的用途。
  1. import time # 引入time

  2. nowTime = int(time.time()) # 取得現在時間
  3. struct_time = time.localtime(nowTime) # 轉換成時間元組
  4. timeString = time.strftime("%Y %m %d %I:%M:%S %P", struct_time) # 將時間元組轉換成想要的字串
  5. print(timeString)
複製代碼




您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

Archiver|手機版|小黑屋|TShopping

GMT+8, 2025-8-1 03:25 , Processed in 0.023142 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表