Spaces:
Running
Running
# -*- coding: utf-8 -*- | |
""" | |
This module offers general convenience and utility functions for dealing with | |
datetimes. | |
.. versionadded:: 2.7.0 | |
""" | |
from __future__ import unicode_literals | |
from datetime import datetime, time | |
def today(tzinfo=None): | |
""" | |
Returns a :py:class:`datetime` representing the current day at midnight | |
:param tzinfo: | |
The time zone to attach (also used to determine the current day). | |
:return: | |
A :py:class:`datetime.datetime` object representing the current day | |
at midnight. | |
""" | |
dt = datetime.now(tzinfo) | |
return datetime.combine(dt.date(), time(0, tzinfo=tzinfo)) | |
def default_tzinfo(dt, tzinfo): | |
""" | |
Sets the ``tzinfo`` parameter on naive datetimes only | |
This is useful for example when you are provided a datetime that may have | |
either an implicit or explicit time zone, such as when parsing a time zone | |
string. | |
.. doctest:: | |
>>> from dateutil.tz import tzoffset | |
>>> from dateutil.parser import parse | |
>>> from dateutil.utils import default_tzinfo | |
>>> dflt_tz = tzoffset("EST", -18000) | |
>>> print(default_tzinfo(parse('2014-01-01 12:30 UTC'), dflt_tz)) | |
2014-01-01 12:30:00+00:00 | |
>>> print(default_tzinfo(parse('2014-01-01 12:30'), dflt_tz)) | |
2014-01-01 12:30:00-05:00 | |
:param dt: | |
The datetime on which to replace the time zone | |
:param tzinfo: | |
The :py:class:`datetime.tzinfo` subclass instance to assign to | |
``dt`` if (and only if) it is naive. | |
:return: | |
Returns an aware :py:class:`datetime.datetime`. | |
""" | |
if dt.tzinfo is not None: | |
return dt | |
else: | |
return dt.replace(tzinfo=tzinfo) | |
def within_delta(dt1, dt2, delta): | |
""" | |
Useful for comparing two datetimes that may have a negligible difference | |
to be considered equal. | |
""" | |
delta = abs(delta) | |
difference = dt1 - dt2 | |
return -delta <= difference <= delta | |