Python 如何检查时间是否为午夜,如果为真则不显示时间
Python How to Check if time is midnight and not display time if true
我正在修改我们的太平洋时区过滤器以包含时间选项。如果午夜,我不希望显示时间组件。到目前为止,我们使用的唯一导入是 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)
检查时间是否为午夜:
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
我认为最好的办法是在传递之前从 datetime
中取出 time()
,然后将其与 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
覆盖指定的格式字符串可能不是一个好主意,因此可以将 "add 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'
我不确定这是否是您 are/were 寻找的解决方案,但我个人使用简单比较:
import datetime
...
time == datetime.time(hour=0, minute=0, second=0, microsecond=0)
其中 time 是 TimeObject (datetime.time)
或者,您可以使用日期时间对象的 .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 and now.microsecond == 0
midnight
是一个布尔值,表示现在是否是 US/Pacific 时区的午夜。
为 UTC 试试这个:
def checkIfMidnight():
return (time.time() % 86400) == 0
我正在修改我们的太平洋时区过滤器以包含时间选项。如果午夜,我不希望显示时间组件。到目前为止,我们使用的唯一导入是 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)
检查时间是否为午夜:
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
我认为最好的办法是在传递之前从 datetime
中取出 time()
,然后将其与 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
覆盖指定的格式字符串可能不是一个好主意,因此可以将 "add 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'
我不确定这是否是您 are/were 寻找的解决方案,但我个人使用简单比较:
import datetime
...
time == datetime.time(hour=0, minute=0, second=0, microsecond=0)
其中 time 是 TimeObject (datetime.time)
或者,您可以使用日期时间对象的 .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 and now.microsecond == 0
midnight
是一个布尔值,表示现在是否是 US/Pacific 时区的午夜。
为 UTC 试试这个:
def checkIfMidnight():
return (time.time() % 86400) == 0