#PY小貼士# 在時間與字元間轉換

  • 2020 年 2 月 10 日
  • 筆記

今天是 2019 年的最後一天。很多人都在這個特殊的日子總結過去的一年,計劃新的一年。

那我們今天就來講一講 Python 里與時間有關的事:

如何將時間類型(datetime)字元串類型(str)進行相互轉換

這個需求在實際開發中非常常見。比如我們後台拿到的時間要在介面上顯示;或者用戶輸入了時間,需要進行計算及保存。Python 中可以實現的方法也不止一種,其中最常見的是 strftime() strptime()這兩個相對的函數。

datetime.strptime(date_string, format)

這裡的 p 表示 parse(也有認為是 pointer 的意思),意為 str -> time,也就是「從字元轉到時間」的意思。參數 date_string 表示時間的字元串,format 是設定轉換的格式,返回值是時間類型。

程式碼示例:

>>> import datetime  >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")  >>> dt  datetime.datetime(2006, 11, 21, 16, 30)

datetime.strftime(format)

這裡的 f 表示 from,意為 str <- time,也就是「從時間轉到字元」的意思。參數 format 是設定轉換的格式,返回值是字元串。

程式碼示例:

>>> dt.strftime("%A, %d. %B %Y %I:%M%p")  'Tuesday, 21. November 2006 04:30PM'

注意:這兩個都是 datetime 模組里的方法,但區別是,strptime 是類方法,由 datetime 類來調用;strftime 是實例方法,由一個具體的 datetime 對象來調用。

它們用到的格式化字元標記都是一致的,我們在這裡也給大家列出來供參考。

附:格式化的具體程式碼說明

指令

意義

示例

%a

當地工作日的縮寫。

Sun, Mon, …, Sat (en_US);So, Mo, …, Sa (de_DE)

%A

本地化的星期中每日的完整名稱。

Sunday, Monday, …, Saturday (en_US);Sonntag, Montag, …, Samstag (de_DE)

%w

以十進位數顯示的工作日,其中0表示星期日,6表示星期六。

0, 1, …, 6

%d

補零後,以十進位數顯示的月份中的一天。

01, 02, …, 31

%b

當地月份的縮寫。

Jan, Feb, …, Dec (en_US);Jan, Feb, …, Dez (de_DE)

%B

本地化的月份全名。

January, February, …, December (en_US);Januar, Februar, …, Dezember (de_DE)

%m

補零後,以十進位數顯示的月份。

01, 02, …, 12

%y

補零後,以十進位數表示的,不帶世紀的年份。

00, 01, …, 99

%Y

十進位數表示的帶世紀的年份。

0001, 0002, …, 2013, 2014, …, 9998, 9999

%H

以補零後的十進位數表示的小時(24 小時制)。

00, 01, …, 23

%I

以補零後的十進位數表示的小時(12 小時制)。

01, 02, …, 12

%p

本地化的 AM 或 PM 。

AM, PM (en_US);am, pm (de_DE)

%M

補零後,以十進位數顯示的分鐘。

00, 01, …, 59

%S

補零後,以十進位數顯示的秒。

00, 01, …, 59

%f

以十進位數表示的毫秒,在左側補零。

000000, 000001, …, 999999

%z

UTC 偏移量,格式為 ±HHMM[SS[.ffffff]] (如果是簡單型對象則為空字元串)。

(空), +0000, -0400, +1030, +063415, -030712.345216

%Z

時區名稱(如果對象為簡單型則為空字元串)。

(空), UTC, EST, CST

%j

以補零後的十進位數表示的一年中的日序號。

001, 002, …, 366

%U

以補零後的十進位數表示的一年中的周序號(星期日作為每周的第一天)。 在新的一年中第一個星期日之前的所有日子都被視為是在第 0 周。

00, 01, …, 53

%W

以十進位數表示的一年中的周序號(星期一作為每周的第一天)。 在新的一年中第一個第期一之前的所有日子都被視為是在第 0 周。

00, 01, …, 53

%c

本地化的適當日期和時間表示。

Tue Aug 16 21:30:00 1988 (en_US);Di 16 Aug 21:30:00 1988 (de_DE)

%x

本地化的適當日期表示。

08/16/88 (None);08/16/1988 (en_US);16.08.1988 (de_DE)

%X

本地化的適當時間表示。

21:30:00 (en_US);21:30:00 (de_DE)

%%

字面的 '%' 字元。

%

文檔地址:

https://docs.python.org/zh-cn/3.8/library/datetime.html#strftime-and-strptime-format-codes


#PY小貼士#里,我們會分享一些 python 知識點、開發中的小技巧、容易踩到的坑,以及學員遇到並在群里提到真實問題。篇幅盡量短小,適合碎片時間閱讀,歡迎關注!