utils: add datetime-->timestamp conversion

This commit is contained in:
medmunds
2016-03-11 10:04:43 -08:00
parent 7a528af438
commit 6214fbbdcd

View File

@@ -1,13 +1,15 @@
import mimetypes import mimetypes
from base64 import b64encode from base64 import b64encode
from calendar import timegm from datetime import datetime
from email.mime.base import MIMEBase from email.mime.base import MIMEBase
from email.utils import parseaddr, formatdate from email.utils import parseaddr, formatdate
from time import mktime
import six import six
from django.conf import settings from django.conf import settings
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.core.mail.message import sanitize_address, DEFAULT_ATTACHMENT_MIME_TYPE from django.core.mail.message import sanitize_address, DEFAULT_ATTACHMENT_MIME_TYPE
from django.utils.timezone import utc
UNSET = object() # Used as non-None default value UNSET = object() # Used as non-None default value
@@ -181,9 +183,24 @@ def get_anymail_setting(setting, default=UNSET, allow_bare=False):
return default return default
EPOCH = datetime(1970, 1, 1, tzinfo=utc)
def timestamp(dt):
"""Return the unix timestamp (seconds past the epoch) for datetime dt"""
# This is the equivalent of Python 3.3's datetime.timestamp
try:
return dt.timestamp()
except AttributeError:
if dt.tzinfo is None:
return mktime(dt.timetuple())
else:
return (dt - EPOCH).total_seconds()
def rfc2822date(dt): def rfc2822date(dt):
"""Turn an aware datetime into a date string as specified in RFC 2822.""" """Turn a datetime into a date string as specified in RFC 2822."""
# This is the equivalent of Python 3.3's email.utils.format_datetime # This is almost the equivalent of Python 3.3's email.utils.format_datetime,
assert dt.tzinfo is not None # only aware datetimes allowed # but treats naive datetimes as local rather than "UTC with no information ..."
timeval = timegm(dt.utctimetuple()) timeval = timestamp(dt)
return formatdate(timeval, usegmt=True) return formatdate(timeval, usegmt=True)