Python如何检查时间是否是午夜,如果为真则不显示时间

时间:2016-10-18 22:04:38

标签: python datetime timezone pytz

我正在修改我们的太平洋时区过滤器以包含时间选项。如果午夜我不希望显示时间组件。到目前为止,我们使用的唯一导入是dateutil.parser。任何关于最佳解决方案的指针都将不胜感激!感谢。

def to_pacific_date_str(timestamp, format='%Y-%m-%d', time=False):
    pacific_timestamp = timestamp

    if time:
        format='%Y-%m-%d %H:%M' # 2016-10-03 00:00
    if timestamp.tzname() is None:
        # setting timezone lost when pulled from DB
        utc_timestamp = timestamp.replace(tzinfo=pytz.utc)
        # always converting to pacific timezone
        pacific_timestamp = utc_timestamp.astimezone(pytz.timezone('US/Pacific'))
    return pacific_timestamp.strftime(format)

5 个答案:

答案 0 :(得分:4)

我认为最好的办法是在传递之前从time()获取datetime,然后将其与datetime.time(0, 0)进行比较。

import pytz
import datetime

def to_pacific_date_str(timestamp, date_fmt='%Y-%m-%d', time=False):
    pacific_timestamp = timestamp

    if timestamp.tzinfo is None:
        # setting timezone lost when pulled from DB
        utc_timestamp = timestamp.replace(tzinfo=pytz.utc)
        # always converting to pacific timezone
        pacific_timestamp = utc_timestamp.astimezone(pytz.timezone('US/Pacific'))

    if time and pacific_timestamp.time() != datetime.time(0, 0):
        date_fmt = '%Y-%m-%d %H:%M' # 2016-10-03 00:00

    return pacific_timestamp.strftime(date_fmt)

请注意,我已将format更改为date_fmt,因为format() is already a builtin。此外,从设计的角度来看,让time覆盖指定的格式字符串可能不是一个好主意,因此可能会更改"添加时间"部分为date_fmt = date_fmt + ' %H:%M'

演示:

>>> PST = pytz.timezone('US/Pacific')
>>> to_pacific_date_str(PST.localize(datetime.datetime(2015, 4, 1, 0, 0)), time=True)
'2015-04-01'

>>> PST = pytz.timezone('US/Pacific')
>>> to_pacific_date_str(PST.localize(datetime.datetime(2015, 4, 1, 2, 0)), time=True)
'2015-04-01 02:00'

答案 1 :(得分:1)

或者,您可以使用datetime对象的.hour.minute.second属性。像这样:

from datetime import datetime as dt
from pytz import timezone

now = dt.now(timezone('US/Pacific'))
midnight = now.hour == 0 and now.minute == 0 and now.second == 0

midnight是一个布尔值,指示是否在美国/太平洋时区的午夜。

答案 2 :(得分:0)

检查时间是否是午夜:

from datetime import datetime
def checkIfMidnight():
    now = datetime.now()
    seconds_since_midnight = (now - now.replace(hour=0, minute=0, second=0, microsecond=0)).total_seconds()
    return seconds_since_midnight == 0

答案 3 :(得分:0)

我不确定这是你正在/正在寻找的解决方案,但我个人使用简单的比较:

import datetime   
...
time == datetime.time(hour=0, minute=0, second=0, microsecond=0)

其中 time 是TimeObject(datetime.time)

答案 4 :(得分:0)

在 UTC 时试试这个:

def checkIfMidnight():
    return (time.time() % 86400) == 0