Guest User

Untitled

a guest
Dec 11th, 2018
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. def timedelta_datetime_list(date_list, reverse=False, expanded_info=False):
  2. """
  3. Gives the difference between the date element and the next one.
  4.  
  5. :param date_list: list of datetime/date objects
  6. :type date_list: list
  7. :param reverse: How the list should be sorted list.sort(reverse=<True,False>)
  8. :type reverse: bool
  9. :param expanded_info: Adds the first and second date on the yield as return parameters.
  10. :type expanded_info: bool
  11. :return: Yields the difference between the current date element and the next one.
  12. :return type: datetime.timedelta + Optional: *(datetime.datetime, datetime.datetime)
  13. """
  14. date_list.sort(reverse=reverse)
  15. date_init, i = date_list[0], 1
  16. while i < len(date_list):
  17. if expanded_info:
  18. yield date_list[i] - date_init, date_list[i], date_init
  19. else:
  20. yield date_list[i] - date_init
  21. date_init, i = date_list[i], i + 1
  22.  
  23. def xrange_date(date_start_obj, date_end_obj, timedelta_obj):
  24. """
  25. `xrange` adaptation for date and datetime objects.
  26.  
  27. :param date_start_obj: date to start
  28. :type date_start_obj: datetime.date, datetime.datetime
  29. :param date_end_obj: date to end
  30. :type date_end_obj: datetime.date, datetime.datetime
  31. :param timedelta_obj: increment or decrement for iteration
  32. :type timedelta_obj: datetime.timedelta, dateutil.relativedelta.relativedelta
  33. :return: Yields elements while dt_start (</>) dt_end.
  34. :return type: datetime.date, datetime.datetime
  35. """
  36. if (getattr(timedelta_obj, 'total_seconds', False) and timedelta_obj.total_seconds() or timedelta_obj) >= 0:
  37. cp_modifier = type(date_start_obj).__le__
  38. else:
  39. cp_modifier = type(date_start_obj).__ge__
  40. while cp_modifier(date_start_obj, date_end_obj):
  41. yield date_start_obj
  42. date_start_obj = date_start_obj + timedelta_obj
  43.  
  44. def timedelta_to_hhmmss(tdelta, to_string=False):
  45. """
  46. Converts timedelta on hours, minutes and seconds.
  47.  
  48. :param tdelta: datetime.timedelta object
  49. :param to_string: Parses response to text formatted with leading zeroes.
  50. :return: hours, minutes, seconds
  51. :rtype: int, int, int
  52. """
  53. hh, mm = divmod(abs(tdelta.total_seconds() / 60.0), 60.0)
  54. _, ss = divmod(abs(timedelta(minutes=mm).total_seconds()), 60.0)
  55. if to_string:
  56. return '%02i' % int(hh), '%02i' % int(mm), '%02i' % int(ss)
  57. return int(hh), int(mm), int(ss)
Add Comment
Please, Sign In to add comment