# 第十六天 時間與日期 > [color=#40f1ef][name=LHB阿好伯, 2020/02/09][:earth_africa:](https://www.facebook.com/LHB0222/) ###### tags: `Python_30` `R & python` ![](https://i.imgur.com/1tdrdMF.jpg) [TOC] 之前有整理過一篇[R語言_時間資料處理](/H5ec_KE6SMWs8oPmcGCpsg)今天就來討論看看R跟python的差異 在資料處理之中,時常會需要遇到時間格式的處理 實驗數據、股市資料、氣候資訊隨著時間不斷的流逝 各式資料也不斷的生成的情況下時間的判讀就顯得重要 # 取得時間資訊 在R中內建許多函數可以取得時間資訊 ```r= # R Code Sys.Date() #當前日期 lubridate::today() date() #當前系統日期和時間 Sys.time() #當前系統日期和時間 lubridate::now() Sys.timezone() #有關時區的信息將返回當前時區的名稱 ``` :::success [1] "2020-12-25" [1] "Fri Dec 25 23:01:32 2020" [1] "2020-12-25 23:01:33 CST" [1] "Asia/Taipei" ::: 而Python則是使用 datetime套件 ```python= # Python code from datetime import datetime now = datetime.now() #現在詳細日期與時間 print(now) day = now.day #現在日期 print(day) month = now.month print(month) #現在月份 year = now.year print(year) #現在年份 hour = now.hour print(hour) #現在小時數 minute = now.minute print(minute) #現在分鐘數 second = now.second print(second) #現在現在秒數 timestamp = now.timestamp() #距離1970年過去幾秒 print(timestamp) ``` :::success 2020-12-25 23:06:07.196302 25 12 2020 23 6 7 1608908767.196302 ::: ## date日期函數 :::danger date(year, month, day) max = datetime.date(9999, 12, 31) min = datetime.date(1, 1, 1) ::: ```python= # Python code from datetime import date d = date(2020, 1, 1) print(d) print('Current date:', d.today()) today = date.today() print("Current year:", today.year) print("Current month:", today.month) print("Current day:", today.day) ``` :::success Current date: 2020-12-27 Current year: 2020 Current month: 12 Current day: 27 ::: ## time 時間函數 :::danger time([hour], [minute], [second],[microsecond]) 參數皆可選 max = datetime.time(23, 59, 59, 999999) min = datetime.time(0, 0) ::: ```python= # Python code from datetime import time a = time() print("a =", a) b = time(10, 30, 50) print("b =", b) c = time(hour=10, minute=30, second=50) print("c =", c) d = time(10, 30, 50, 200555) print("d =", d) ``` :::success a = 00:00:00 b = 10:30:50 c = 10:30:50 c = 10:30:50 d = 10:30:50.200555 ::: # strftime時間格式 date,datetime和time的物件都支持一種strftime(format)格式 該可以在格式字串的控制下創建表示時間的字串 下表為可以使用的格式 | 格式 | 含義 | Example | |---|---|---| | %a | 工作日名稱的縮寫 | Sun, Mon, ... | | %A | 工作日全名 | Sunday, Monday, ... | | %w | 工作日為十進制數字 | 0, 1, ..., 6 | | %d | 月份中的一天,以零填充的十進制數表示 | 01, 02, ..., 31 | | %-d | 以十進制數表示的月份中的一天 | 1, 2, ..., 30 | | %b | 月份的縮寫 | Jan, Feb, ..., Dec | | %B | 完整的月份名稱 | January, February, ... | | %m | 以零填充的十進制數字表示的月份 | 01, 02, ..., 12 | | %-m | 以十進制數表示的月份 | 1, 2, ..., 12 | | %y | 無世紀的年份,為零填充的十進制數字 | 00, 01, ..., 99 | | %-y | 沒有世紀的年份作為十進制數字 | 0, 1, ..., 99 | | %Y | 以世紀作為十進制數字的年份 | 2013, 2019 etc. | | %H | 小時(24小時制),為零填充的十進制數字 | 00, 01, ..., 23 | | %-H | 小時(24小時制)為十進制數字 | 0, 1, ..., 23 | | %I | 小時(12小時制),為零填充的十進制數字 | 01, 02, ..., 12 | | %-I | 小時(12小時制)為十進制數字 | 1, 2, ... 12 | | %p | 語言環境的上午或下午 | AM, PM | | %M | 分鐘,為零填充的十進制數字 | 00, 01, ..., 59 | | %-M | 以十進制數字表示 | 0, 1, ..., 59 | | %S | 第二個為零填充的十進制數 | 00, 01, ..., 59 | | %-S | 第二個十進制數字 | 0, 1, ..., 59 | | %f | 微秒,十進制數,在左側補零 | 000000 - 999999 | | %z | UTC偏移量,格式為+ HHMM或-HHMM |   | | %Z | 時區名稱 |   | | %j | 一年中的一天,以零填充的十進制數表示 | 001, 002, ..., 366 | | %-j | 一年中的天,以十進制數字表示 | 1, 2, ..., 366 | | %U | 一年中的第幾週(星期日為一周的第一天)新年中第一個星期日之前的所有天均視為第0週 | 00, 01, ..., 53 | | %W | 一年中的第幾週(星期一為一周中的第一天)第一個星期一之前的新的一年中的所有天均視為在第0週 | 00, 01, ..., 53 | | %c | 語言環境的適當日期和時間表示 | Mon Sep 30 07:06:05 2013 | | %x | 語言環境的適當日期表示形式 | 09/30/13 | | %X | 語言環境的適當時間表示形式 | 07:06:05 | | %% | 文字'%'字符 | % | ### strftime 格式化日期輸出 ```python= # Python code now = datetime.now() t = now.strftime("%H:%M:%S") print("time:", t) time_one = now.strftime("%m/%d/%Y, %H:%M:%S") # mm/dd/YY H:M:S format print("time one:", time_one) ``` :::success time: 21:56:34 time one: 12/27/2020, 21:56:34 ::: ## strptime 字串轉換為時間格式 ```python= # Python code from datetime import datetime date_string = "27 12, 2019" print("date_string =", date_string) date_object = datetime.strptime(date_string, "%d %m, %Y") print("date_object =", date_object) ``` # timedelata 計算日期差 timedelta()函數存在於datetime套件中 該函數常用於計算日期差 也可以用於Python中的日期操作 這是執行日期操作的方法之一 :::danger datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) ::: ```python= # Python code from datetime import timedelta t1 = timedelta(weeks=12, days=10, hours=4, seconds=20) t2 = timedelta(days=7, hours=5, minutes=3, seconds=30) t3 = t1 - t2 print("t3 =", t3) ``` :::success t3 = 86 days, 22:56:50 ::: 後面發現其實使用date函數也是可以直接計算 ```python= # Python code from datetime import date t1 = date(2021, 1, 7) t2 = date(2020,12,28) t3 = t1 - t2 print("t3 =", t3) ``` :::success t3 = 10 days, 0:00:00 ::: Pythone關於時間的套件就簡單介紹到這裡 若是有機會可以嘗試看看使用R的lubridate套件 超級好用大推沒意外未來一段時間若是遇到時間資料 我應該都會使用R來處理 # 其他相關套件 [Arrow:Python更好的日期與時間處理套件](https://arrow.readthedocs.io/en/stable/) 🌟 🌟全文可以至下方連結觀看或是補充 ## 參考資料 >[datetime—基本日期和時間類型](https://docs.python.org/3/library/datetime.html) 全文分享至 https://www.facebook.com/LHB0222/ https://www.instagram.com/ahb0222/ 有疑問想討論的都歡迎於下方留言 喜歡的幫我分享給所有的朋友 \o/ 有所錯誤歡迎指教 # [:page_with_curl: 全部文章列表](https://hackmd.io/@LHB-0222/AllWritings) ![](https://i.imgur.com/47HlvGH.png)