306 from __future__
import absolute_import
308 from datetime
import datetime, timedelta
314 is_string, roundup, secs_to_timestr, timestr_to_secs,
315 type_name, IRONPYTHON)
318 __all__ = [
'convert_time',
'convert_date',
'subtract_date_from_date',
319 'subtract_time_from_date',
'subtract_time_from_time',
320 'add_time_to_time',
'add_time_to_date',
'get_current_date']
348 result_format='timestamp', exclude_millis=False):
349 if time_zone.upper() ==
'LOCAL':
351 elif time_zone.upper() ==
'UTC':
352 dt = datetime.utcnow()
354 raise ValueError(
"Unsupported timezone '%s'." % time_zone)
356 return date.convert(result_format, millis=
is_falsy(exclude_millis))
376 def convert_date(date, result_format='timestamp', exclude_millis=False,
378 return Date(date, date_format).convert(result_format,
399 return Time(time).convert(result_format, millis=
is_falsy(exclude_millis))
422 exclude_millis=False, date1_format=None,
424 time =
Date(date1, date1_format) -
Date(date2, date2_format)
425 return time.convert(result_format, millis=
is_falsy(exclude_millis))
447 exclude_millis=False, date_format=None):
448 date =
Date(date, date_format) +
Time(time)
449 return date.convert(result_format, millis=
is_falsy(exclude_millis))
471 exclude_millis=False, date_format=None):
472 date =
Date(date, date_format) -
Time(time)
473 return date.convert(result_format, millis=
is_falsy(exclude_millis))
492 exclude_millis=False):
494 return time.convert(result_format, millis=
is_falsy(exclude_millis))
514 exclude_millis=False):
516 return time.convert(result_format, millis=
is_falsy(exclude_millis))
532 if isinstance(date, datetime):
538 raise ValueError(
"Unsupported input '%s'." % date)
544 dt = datetime.fromtimestamp(secs)
545 return dt.replace(microsecond=
roundup(secs % 1 * 1e6))
550 input_format =
'%Y-%m-%d %H:%M:%S.%f'
553 return datetime.strptime(ts, input_format)
556 ts =
''.join(d
for d
in date
if d.isdigit())
557 if not (8 <= len(ts) <= 20):
558 raise ValueError(
"Invalid timestamp '%s'." % date)
559 ts = ts.ljust(20,
'0')
560 return '%s-%s-%s %s:%s:%s.%s' % (ts[:4], ts[4:6], ts[6:8], ts[8:10],
561 ts[10:12], ts[12:14], ts[14:])
565 return IRONPYTHON
and '%f' in format
569 match = re.search(
'\d+$', ts)
571 raise ValueError(
"time data '%s' does not match format '%s%%f'."
572 % (ts, input_format))
573 end_digits = match.group(0)
574 micro =
int(end_digits.ljust(6,
'0'))
575 dt = datetime.strptime(ts[:-len(end_digits)], input_format)
576 return dt.replace(microsecond=micro)
579 if not format.endswith(
'%f'):
580 raise ValueError(
'%f directive is supported only at the end of '
581 'the format string on this Python interpreter.')
587 secs = 1
if dt.microsecond >= 5e5
else 0
588 dt = dt.replace(microsecond=0) + timedelta(seconds=secs)
591 format = format.lower()
592 if format ==
'timestamp':
594 if format ==
'datetime':
596 if format ==
'epoch':
598 raise ValueError(
"Unknown format '%s'." % format)
602 return dt.strftime(format)
604 return dt.strftime(format) +
'%06d' % dt.microsecond
608 return dt.strftime(
'%Y-%m-%d %H:%M:%S')
609 ms =
roundup(dt.microsecond / 1000.0)
611 dt += timedelta(seconds=1)
613 return dt.strftime(
'%Y-%m-%d %H:%M:%S') +
'.%03d' % ms
616 return time.mktime(dt.timetuple()) + dt.microsecond / 1e6
619 if isinstance(other, Time):
621 raise TypeError(
'Can only add Time to Date, got %s.' %
type_name(other))
624 if isinstance(other, Date):
626 if isinstance(other, Time):
628 raise TypeError(
'Can only subtract Date or Time from Date, got %s.'
638 if isinstance(time, timedelta):
639 return time.total_seconds()
650 result_converter = getattr(self,
'_convert_to_%s' % format.lower())
651 except AttributeError:
652 raise ValueError(
"Unknown format '%s'." % format)
654 return result_converter(seconds, millis)
672 if isinstance(other, Time):
674 raise TypeError(
'Can only add Time to Time, got %s.' %
type_name(other))
677 if isinstance(other, Time):
679 raise TypeError(
'Can only subtract Time from Time, got %s.'
def _remove_f_from_format(self, format)
def _convert_to_datetime(self, date, input_format)
def convert(self, format, millis=True)
def _convert_to_epoch(self, dt)
def __init__(self, date, input_format=None)
def _convert_to_timestamp(self, dt, millis=True)
def _convert_to_custom_timestamp(self, dt, format)
def _need_to_handle_f_directive(self, format)
def _string_to_datetime(self, ts, input_format)
def _normalize_timestamp(self, date)
def _handle_un_supported_f_directive(self, ts, input_format)
def _seconds_to_datetime(self, secs)
def _convert_to_number(self, seconds, millis=True)
def _convert_to_timedelta(self, seconds, millis=True)
def _convert_to_compact(self, seconds, millis=True)
def _convert_to_timer(self, seconds, millis=True)
def convert(self, format, millis=True)
def _convert_to_verbose(self, seconds, millis=True)
def _convert_time_to_seconds(self, time)
def add_time_to_date(date, time, result_format='timestamp', exclude_millis=False, date_format=None)
Adds time to date and returns the resulting date.
def subtract_time_from_date(date, time, result_format='timestamp', exclude_millis=False, date_format=None)
Subtracts time from date and returns the resulting date.
def subtract_time_from_time(time1, time2, result_format='number', exclude_millis=False)
Subtracts time from another time and returns the resulting time.
def add_time_to_time(time1, time2, result_format='number', exclude_millis=False)
Adds time to another time and returns the resulting time.
def convert_time(time, result_format='number', exclude_millis=False)
Converts between supported time formats.
def convert_date(date, result_format='timestamp', exclude_millis=False, date_format=None)
Converts between supported date formats.
def subtract_date_from_date(date1, date2, result_format='number', exclude_millis=False, date1_format=None, date2_format=None)
Subtracts date from another date and returns time between.
def get_current_date(time_zone='local', increment=0, result_format='timestamp', exclude_millis=False)
Returns current local or UTC time with an optional increment.
def roundup(number, ndigits=0, return_type=None)
Rounds number to the given number of digits.
def elapsed_time_to_string(elapsed, include_millis=True)
Converts elapsed time in milliseconds to format 'hh:mm:ss.mil'.
def secs_to_timestr(secs, compact=False)
Converts time in seconds to a string representation.
def timestr_to_secs(timestr, round_to=3)
Parses time like '1h 10s', '01:00:10' or '42' and returns seconds.
def is_falsy(item)
Opposite of :func:is_truthy.
def get_version(naked=False)