61 lines
1.5 KiB
Python
61 lines
1.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import absolute_import
|
|
|
|
import datetime
|
|
|
|
|
|
def total_seconds(td): # pragma: no cover
|
|
return td.total_seconds()
|
|
|
|
|
|
def is_timestamp(value):
|
|
"""Check if value is a valid timestamp."""
|
|
if isinstance(value, bool):
|
|
return False
|
|
if not (
|
|
isinstance(value, int) or isinstance(value, float) or isinstance(value, str)
|
|
):
|
|
return False
|
|
try:
|
|
float(value)
|
|
return True
|
|
except ValueError:
|
|
return False
|
|
|
|
|
|
# Credit to https://stackoverflow.com/a/1700069
|
|
def iso_to_gregorian(iso_year, iso_week, iso_day):
|
|
"""Converts an ISO week date tuple into a datetime object."""
|
|
|
|
if not 1 <= iso_week <= 53:
|
|
raise ValueError("ISO Calendar week value must be between 1-53.")
|
|
|
|
if not 1 <= iso_day <= 7:
|
|
raise ValueError("ISO Calendar day value must be between 1-7")
|
|
|
|
# The first week of the year always contains 4 Jan.
|
|
fourth_jan = datetime.date(iso_year, 1, 4)
|
|
delta = datetime.timedelta(fourth_jan.isoweekday() - 1)
|
|
year_start = fourth_jan - delta
|
|
gregorian = year_start + datetime.timedelta(days=iso_day - 1, weeks=iso_week - 1)
|
|
|
|
return gregorian
|
|
|
|
|
|
# Python 2.7 / 3.0+ definitions for isstr function.
|
|
|
|
try: # pragma: no cover
|
|
basestring
|
|
|
|
def isstr(s):
|
|
return isinstance(s, basestring) # noqa: F821
|
|
|
|
|
|
except NameError: # pragma: no cover
|
|
|
|
def isstr(s):
|
|
return isinstance(s, str)
|
|
|
|
|
|
__all__ = ["total_seconds", "is_timestamp", "isstr", "iso_to_gregorian"]
|