How can i actually create a timestamp for the next 6 o'clock, whether that's today or tomorrow?
I tried something with datetime.datetime.today() and replace the day with +1 and hour = 6 but i couldnt convert it into a timestamp.
Need your help
How can i actually create a timestamp for the next 6 o'clock, whether that's today or tomorrow?
I tried something with datetime.datetime.today() and replace the day with +1 and hour = 6 but i couldnt convert it into a timestamp.
Need your help
To generate a timestamp for tomorrow at 6 AM, you can use something like the following. This creates a datetime object representing the current time, checks to see if the current hour is < 6 o'clock or not, creates a datetime object for the next 6 o'clock (including adding incrementing the day if necessary), and finally converts the datetime object into a timestamp
from datetime import datetime, timedelta import time # Get today's datetime dtnow = datetime.now() # Create datetime variable for 6 AM dt6 = None # If today's hour is < 6 AM if dtnow.hour < 6: # Create date object for today's year, month, day at 6 AM dt6 = datetime(dtnow.year, dtnow.month, dtnow.day, 6, 0, 0, 0) # If today is past 6 AM, increment date by 1 day else: # Get 1 day duration to add day = timedelta(days=1) # Generate tomorrow's datetime tomorrow = dtnow + day # Create new datetime object using tomorrow's year, month, day at 6 AM dt6 = datetime(tomorrow.year, tomorrow.month, tomorrow.day, 6, 0, 0, 0) # Create timestamp from datetime object timestamp = time.mktime(dt6.timetuple()) print(timestamp) if dtnow.hour < 6, for example if dtnow.hour < 6:\n dt6 = datetime(dtnow.year, dtnow.month, dtnow.day, 6, 0, 0, 0)\nelse:. I can add that if condition above if that's what you're looking for.time.mktime() may fail if the local timezone may have different utc offsets at different dates (most of them). Use pytz module that provides a portable access to the tz database insteadTo get the next 6 o'clock while handling timezones that observe Daylight saving time (DST) correctly:
from datetime import datetime, time, timedelta import pytz # $ pip install pytz from tzlocal import get_localzone # $ pip install tzlocal DAY = timedelta(1) local_timezone = get_localzone() now = datetime.now(local_timezone) naive_dt6 = datetime.combine(now, time(6)) while True: try: dt6 = local_timezone.localize(naive_dt6, is_dst=None) except pytz.NonExistentTimeError: # no such time today pass except pytz.AmbiguousTimeError: # DST transition (or similar) dst = local_timezone.localize(naive_dt6, is_dst=True) std = local_timezone.localize(naive_dt6, is_dst=False) if now < min(dst, std): dt6 = min(dst, std) break elif now < max(dst, std): dt6 = max(dst, std) break else: if now < dt6: break naive_dt6 += DAY Once you have an aware datetime object that represents the next 6 o'clock in the local timezone, it is easy to get the timestamp:
timestamp = dt6.timestamp() # in Python 3.3+ Or on older Python versions:
timestamp = (dt6 - datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds() See Converting datetime.date to UTC timestamp in Python.
The solution works even if any of the following happens:
time.mktime() calls) has no access to a historical timezone database on a given system (notably: Windows)—pytz provides a portable access to the tz databaseX hour (where X is 6am in your case) or if the UTC offset for the local timezone has changed for any other reason—"naive datetime object + relativedelta" solution would fail silently to find the correct number of seconds but timezone-aware datetime objects could enable to find the right time differenceX hour (today or tomorrow) does not exist or ambiguous in the local time zone (most often, it happens during DST transitions—every year in many timezones). Solutions using dateutil tzinfos or pytz-based solutions that use .localize() without is_dst=None would fail silently. The application should handle NonExistentTimeError and AmbiguousTimeError exceptions explicitly in this caseX hour happens in the local timezone but before the second time the X hour happens —"rrule + return min(localize(ndt, is_dst=True), localize(ndt, is_dst=False))" solution would fail silently. The min/max code in the AmbiguousTimeError clause above handles it correctly.