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

Adr*_*lis 5 python timezone datetime 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)
Run Code Online (Sandbox Code Playgroud)

Pau*_*aul 5

我相信最好的办法是在传递之前time()从 中获取,然后将其与 进行比较。datetimedatetime.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)
Run Code Online (Sandbox Code Playgroud)

请注意,我已更改formatdate_fmt,因为format()它已经是内置的。另外,从设计的角度来看,覆盖指定的格式字符串可能不是一个好主意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'
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试使用 UTC:

def checkIfMidnight():
    return (time.time() % 86400) == 0
Run Code Online (Sandbox Code Playgroud)