簡體   English   中英

Python:如何比較兩個日期/時間?

[英]Python: How to compare two date/time?

我有以下兩個日期/時間,分別是date_time1date_time2

2017-04-15 00:00:00
2017-04-17 15:35:19+00:00

parsed1 = dateutil.parser.parse(date_time1)
parsed2 = dateutil.parser.parse(date_time2)

如果我要收到另一個名為input_date_time日期/時間(例如2017-04-16 input_date_time + 00:00),我想做以下事情:

#    Would like to check if `input_date_time` is within the range 
if parsed1 <= input_date_time <= parsed2:
… 

並得到一個錯誤: TypeError: can't compare offset-naive and offset-aware datetimes

想把它分解為年,月,日,小時,分鍾和秒,並比較每一個。

這樣做的正確方法是什么?

這是我編輯的(再次)示例我認為我們應該為每個日期時間對象提供時區數據,假設date_time1是本地時間。 我想我們應該將時區數據添加到date_time1而不是清除其他tzinfo(我的第一個例子)

import dateutil.parser
import datetime
from pytz import utc

date_time1 ='2017-04-15 00:00:00'
date_time2 ='2017-04-17 15:35:19+00:00'
input_date_time = '2017-04-16 12:11:42+00:00'

parsed1 = dateutil.parser.parse(date_time1).astimezone(utc)
parsed2 = dateutil.parser.parse(date_time2)
input_parsed = dateutil.parser.parse(input_date_time)

if parsed1 <= input_parsed  <= parsed2: 
    print('input is between')

這可以檢查輸入是否在parsed1parsed2之間

假設你有python datetime obejcts,python中的兩個對象可以與“<”,“==”和“>”符號進行比較。

您不需要解析它們來比較它們。

if date_time1 <= input_date_time <= datetime_2:
    #do work

如果你沒有datetime對象,那么在datetime類中還有一個名為datetime的方法,如果你發現它有用,它將允許你創建datetime對象。

您需要將時區應用於'naive'datetime對象(在您的示例中為2017-04-15 00:00:00 )(以使其能夠識別TZ)或轉換'aware'datetime對象( 2017-04-17 15:35:19+00:00在你的例子中)到'天真'的對象和你想要比較的日期。 然后你的TypeError就會消失。

由於你的第二個日期的時區偏移量為+00:00而你的input_datetime也是+00:00 ,讓我們將UTC應用於天真的第一個日期(假設它是正確的時區),然后將其轉換為你需要的任何時區(你如果UTC正確,則可以跳過轉換 - 現在比較將有效。)

parsed1 = dateutil.parser.parse(date_time1)
parsed2 = dateutil.parser.parse(date_time2)
# make parsed1 timezone aware (UTC)
parsed1 = parsed1.replace(tzinfo=pytz.utc)

現在你的比較應該有效。 如果要將其他時區應用於任何日期,可以使用astimezone函數。 讓我們將時區更改為適用於澳大利亞悉尼的時區。 這是一個時區列表https://gist.github.com/heyalexej/8bf688fd67d7199be4a1682b3eec7568

syd_tz = pytz.timezone('Australia/Sydney')
syd_parsed1 = parsed1.astimezone(syd_tz)

現在,您可以使用strftime的%z%Z參數檢查每個日期時間對象應用的時區。 使用%c將以本地時間格式打印它, %x%X 使用Python3 +:

print("Local time: %s" % syd_parsed1.strftime('%c'))
print("Offset-Timezone-Date-Time: %s" % syd_parsed1.strftime("%z-%Z-%x-%X))

希望有所幫助,當我第一次使用時區時,我不知道有關%c的時區功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM