Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.74 KB | None | 0 0
  1. def _next_weekday(day_of_week=4, time_of_day=datetime.time(hour=3), dt=None):
  2. if dt is None: dt = datetime.datetime.now()
  3. dt += datetime.timedelta(days=7)
  4. if dt.time() < time_of_day: dt = dt.combine(dt.date(), time_of_day)
  5. else: dt = dt.combine(dt.date(), time_of_day) + datetime.timedelta(days=1)
  6. return dt + datetime.timedelta((day_of_week - dt.weekday()) % 7)
  7.  
  8. import datetime
  9.  
  10. _3AM = datetime.time(hour=3)
  11. _FRI = 4 # Monday=0 for weekday()
  12.  
  13. def next_friday_3am(now):
  14. now += datetime.timedelta(days=7)
  15. if now.time() < _3AM:
  16. now = now.combine(now.date(),_3AM)
  17. else:
  18. now = now.combine(now.date(),_3AM) + datetime.timedelta(days=1)
  19. return now + datetime.timedelta((_FRI - now.weekday()) % 7)
  20.  
  21. if __name__ == '__main__':
  22. start = datetime.datetime.now()
  23. for i in xrange(7*24*60*60):
  24. now = start + datetime.timedelta(seconds=i)
  25. then = next_friday_3am(now)
  26. assert datetime.timedelta(days=7) < then - now <= datetime.timedelta(days=14)
  27. assert then.weekday() == _FRI
  28. assert then.time() == _3AM
  29.  
  30. import datetime
  31. import dateutil.relativedelta as reldate
  32.  
  33. def following_friday(dt):
  34. rd=reldate.relativedelta(
  35. weekday=reldate.FR(+2),
  36. hours=+21)
  37. rd2=reldate.relativedelta(
  38. hour=3,minute=0,second=0,microsecond=0)
  39. return dt+rd+rd2
  40.  
  41. if __name__=='__main__':
  42. today=datetime.datetime.now()
  43. for dt in [today+datetime.timedelta(days=i) for i in range(-7,8)]:
  44. print('%s --> %s'%(dt,following_friday(dt)))
  45.  
  46. 2010-03-05 20:42:09.246124 --> 2010-03-19 03:00:00
  47. 2010-03-06 20:42:09.246124 --> 2010-03-19 03:00:00
  48. 2010-03-07 20:42:09.246124 --> 2010-03-19 03:00:00
  49. 2010-03-08 20:42:09.246124 --> 2010-03-19 03:00:00
  50. 2010-03-09 20:42:09.246124 --> 2010-03-19 03:00:00
  51. 2010-03-10 20:42:09.246124 --> 2010-03-19 03:00:00
  52. 2010-03-11 20:42:09.246124 --> 2010-03-19 03:00:00
  53. 2010-03-12 20:42:09.246124 --> 2010-03-26 03:00:00
  54. 2010-03-13 20:42:09.246124 --> 2010-03-26 03:00:00
  55. 2010-03-14 20:42:09.246124 --> 2010-03-26 03:00:00
  56. 2010-03-15 20:42:09.246124 --> 2010-03-26 03:00:00
  57. 2010-03-16 20:42:09.246124 --> 2010-03-26 03:00:00
  58. 2010-03-17 20:42:09.246124 --> 2010-03-26 03:00:00
  59. 2010-03-18 20:42:09.246124 --> 2010-03-26 03:00:00
  60. 2010-03-19 20:42:09.246124 --> 2010-04-02 03:00:00
  61.  
  62. two = datetime.datetime(2010, 3, 12, 2, 0)
  63. for date in [two+datetime.timedelta(days=i) for i in range(-7,8)]:
  64. result = following_friday(date)
  65. print('{0}-->{1}'.format(date,result))
  66.  
  67. 2010-03-05 02:00:00-->2010-03-12 03:00:00
  68. 2010-03-06 02:00:00-->2010-03-19 03:00:00
  69. 2010-03-07 02:00:00-->2010-03-19 03:00:00
  70. 2010-03-08 02:00:00-->2010-03-19 03:00:00
  71. 2010-03-09 02:00:00-->2010-03-19 03:00:00
  72. 2010-03-10 02:00:00-->2010-03-19 03:00:00
  73. 2010-03-11 02:00:00-->2010-03-19 03:00:00
  74. 2010-03-12 02:00:00-->2010-03-19 03:00:00
  75. 2010-03-13 02:00:00-->2010-03-26 03:00:00
  76. 2010-03-14 02:00:00-->2010-03-26 03:00:00
  77. 2010-03-15 02:00:00-->2010-03-26 03:00:00
  78. 2010-03-16 02:00:00-->2010-03-26 03:00:00
  79. 2010-03-17 02:00:00-->2010-03-26 03:00:00
  80. 2010-03-18 02:00:00-->2010-03-26 03:00:00
  81. 2010-03-19 02:00:00-->2010-03-26 03:00:00
  82.  
  83. from datetime import *
  84. >>> today = datetime.today()
  85. >>> todayAtThreeAm = datetime(today.year, today.month, today.day, 3)
  86. >>> todayAtThreeAm
  87. datetime.datetime(2010, 3, 12, 3, 0)
  88. >>> nextFridayAtThreeAm = todayAtThreeAm + timedelta(12 - today.isoweekday())
  89. >>> nextFridayAtThreeAm
  90. datetime.datetime(2010, 3, 19, 3, 0)
  91.  
  92. In [15]: pendulum.now().next(pendulum.FRIDAY).next(pendulum.FRIDAY).add(hours=3)
  93. Out[15]: DateTime(2019, 5, 3, 3, 0, 0, tzinfo=Timezone('America/Los_Angeles'))
  94.  
  95. In [16]: pendulum.now().next(pendulum.FRIDAY).next(pendulum.FRIDAY).add(hours=3).to_iso8601_string()
  96. Out[16]: '2019-05-03T03:00:00-07:00'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement