296 from datetime
import datetime, timedelta
300 from robot.utils import (elapsed_time_to_string, is_falsy, is_number, is_string,
301 secs_to_timestr, timestr_to_secs, type_name)
304 __all__ = [
'convert_time',
'convert_date',
'subtract_date_from_date',
305 'subtract_time_from_date',
'subtract_time_from_time',
306 'add_time_to_time',
'add_time_to_date',
'get_current_date']
335 result_format='timestamp', exclude_millis=False):
336 upper = time_zone.upper()
342 elif upper ==
'UTC' and result_format.upper() ==
'EPOCH':
345 dt = datetime.utcnow()
347 raise ValueError(
"Unsupported timezone '%s'." % time_zone)
349 return date.convert(result_format, millis=
is_falsy(exclude_millis))
369 def convert_date(date, result_format='timestamp', exclude_millis=False,
371 return Date(date, date_format).convert(result_format,
392 return Time(time).convert(result_format, millis=
is_falsy(exclude_millis))
415 exclude_millis=False, date1_format=None,
417 time =
Date(date1, date1_format) -
Date(date2, date2_format)
418 return time.convert(result_format, millis=
is_falsy(exclude_millis))
440 exclude_millis=False, date_format=None):
441 date =
Date(date, date_format) +
Time(time)
442 return date.convert(result_format, millis=
is_falsy(exclude_millis))
464 exclude_millis=False, date_format=None):
465 date =
Date(date, date_format) -
Time(time)
466 return date.convert(result_format, millis=
is_falsy(exclude_millis))
485 exclude_millis=False):
487 return time.convert(result_format, millis=
is_falsy(exclude_millis))
507 exclude_millis=False):
509 return time.convert(result_format, millis=
is_falsy(exclude_millis))
525 if isinstance(date, datetime):
528 return datetime.fromtimestamp(date)
531 raise ValueError(
"Unsupported input '%s'." % date)
536 input_format =
'%Y-%m-%d %H:%M:%S.%f'
537 return datetime.strptime(ts, input_format)
540 ts =
''.join(d
for d
in date
if d.isdigit())
541 if not (8 <= len(ts) <= 20):
542 raise ValueError(
"Invalid timestamp '%s'." % date)
543 ts = ts.ljust(20,
'0')
544 return '%s-%s-%s %s:%s:%s.%s' % (ts[:4], ts[4:6], ts[6:8], ts[8:10],
545 ts[10:12], ts[12:14], ts[14:])
550 secs = 1
if dt.microsecond >= 5e5
else 0
551 dt = dt.replace(microsecond=0) + timedelta(seconds=secs)
554 format = format.lower()
555 if format ==
'timestamp':
557 if format ==
'datetime':
559 if format ==
'epoch':
561 raise ValueError(
"Unknown format '%s'." % format)
564 return dt.strftime(format)
568 return dt.strftime(
'%Y-%m-%d %H:%M:%S')
569 ms = round(dt.microsecond / 1000)
571 dt += timedelta(seconds=1)
573 return dt.strftime(
'%Y-%m-%d %H:%M:%S') +
'.%03d' % ms
576 return time.mktime(dt.timetuple()) + dt.microsecond / 1e6
579 if isinstance(other, Time):
581 raise TypeError(
'Can only add Time to Date, got %s.' %
type_name(other))
584 if isinstance(other, Date):
586 if isinstance(other, Time):
588 raise TypeError(
'Can only subtract Date or Time from Date, got %s.'
598 if isinstance(time, timedelta):
599 return time.total_seconds()
610 result_converter = getattr(self,
'_convert_to_%s' % format.lower())
611 except AttributeError:
612 raise ValueError(
"Unknown format '%s'." % format)
613 seconds = self.
secondsseconds
if millis
else float(round(self.
secondsseconds))
614 return result_converter(seconds, millis)
632 if isinstance(other, Time):
634 raise TypeError(
'Can only add Time to Time, got %s.' %
type_name(other))
637 if isinstance(other, Time):
639 raise TypeError(
'Can only subtract Time from Time, got %s.'
def _convert_to_epoch(self, dt)
def _normalize_timestamp(self, date)
def _string_to_datetime(self, ts, input_format)
def convert(self, format, millis=True)
def __init__(self, date, input_format=None)
def _convert_to_datetime(self, date, input_format)
def _convert_to_custom_timestamp(self, dt, format)
def _convert_to_timestamp(self, dt, millis=True)
def _convert_time_to_seconds(self, time)
def _convert_to_number(self, seconds, millis=True)
def _convert_to_verbose(self, seconds, millis=True)
def _convert_to_compact(self, seconds, millis=True)
def _convert_to_timer(self, seconds, millis=True)
def _convert_to_timedelta(self, seconds, millis=True)
def convert(self, format, millis=True)
def add_time_to_time(time1, time2, result_format='number', exclude_millis=False)
Adds time to another time and returns the resulting time.
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 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 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 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 secs_to_timestr(secs, compact=False)
Converts time in seconds to a string representation.
def timestr_to_secs(timestr, round_to=3, accept_plain_values=True)
Parses time strings like '1h 10s', '01:00:10' and '42' and returns seconds.
def elapsed_time_to_string(elapsed, include_millis=True)
Converts elapsed time in milliseconds to format 'hh:mm:ss.mil'.
def is_falsy(item)
Opposite of :func:is_truthy.
def type_name(item, capitalize=False)
Return "non-technical" type name for objects and types.
def get_version(naked=False)