Python datetime.timezone() Examples
The following are 30
code examples of datetime.timezone().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
datetime
, or try the search function
.
![](https://www.programcreek.com/common/static/images/search.png)
Example #1
Source File: location.py From pvlib-python with BSD 3-Clause "New" or "Revised" License | 7 votes |
def __init__(self, latitude, longitude, tz='UTC', altitude=0, name=None, **kwargs): self.latitude = latitude self.longitude = longitude if isinstance(tz, str): self.tz = tz self.pytz = pytz.timezone(tz) elif isinstance(tz, datetime.timezone): self.tz = 'UTC' self.pytz = pytz.UTC elif isinstance(tz, datetime.tzinfo): self.tz = tz.zone self.pytz = tz elif isinstance(tz, (int, float)): self.tz = tz self.pytz = pytz.FixedOffset(tz*60) else: raise TypeError('Invalid tz specification') self.altitude = altitude self.name = name
Example #2
Source File: utils.py From td-ameritrade-python-api with MIT License | 6 votes |
def datetime_from_milliseconds_since_epoch(ms_since_epoch: int, timezone: datetime.timezone = None) -> datetime.datetime: """Converts milliseconds since epoch to a datetime object. Arguments: ---------- ms_since_epoch {int} -- Number of milliseconds since epoch. Keyword Arguments: -------- timezone {datetime.timezone} -- The timezone of the new datetime object. (default: {None}) Returns: -------- datetime.datetime -- A python datetime object. """ return datetime.datetime.fromtimestamp((ms_since_epoch / 1000), tz=timezone)
Example #3
Source File: utils.py From Imogen with MIT License | 6 votes |
def format_datetime(dt, usegmt=False): """Turn a datetime into a date string as specified in RFC 2822. If usegmt is True, dt must be an aware datetime with an offset of zero. In this case 'GMT' will be rendered instead of the normal +0000 required by RFC2822. This is to support HTTP headers involving date stamps. """ now = dt.timetuple() if usegmt: if dt.tzinfo is None or dt.tzinfo != datetime.timezone.utc: raise ValueError("usegmt option requires a UTC datetime") zone = 'GMT' elif dt.tzinfo is None: zone = '-0000' else: zone = dt.strftime("%z") return _format_timetuple_and_zone(now, zone)
Example #4
Source File: test_10_12_6.py From osxphotos with MIT License | 6 votes |
def test_attributes(): import datetime import osxphotos photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) photos = photosdb.photos(uuid=["sE5LlfekS8ykEE7o0cuMVA"]) assert len(photos) == 1 p = photos[0] assert p.keywords == ["Kids"] assert p.original_filename == "Pumkins2.jpg" assert p.filename == "Pumkins2.jpg" assert p.date == datetime.datetime( 2018, 9, 28, 16, 7, 7, 0, datetime.timezone(datetime.timedelta(seconds=-14400)) ) assert p.description == "Girl holding pumpkin" assert p.title == "I found one!" assert sorted(p.albums) == ["AlbumInFolder", "Pumpkin Farm"] assert p.persons == ["Katie"] assert p.path.endswith( "/tests/Test-10.12.6.photoslibrary/Masters/2019/08/24/20190824-030824/Pumkins2.jpg" ) assert p.ismissing == False
Example #5
Source File: test_mojave_10_14_6.py From osxphotos with MIT License | 6 votes |
def test_attributes(): import datetime import osxphotos photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) photos = photosdb.photos(uuid=["15uNd7%8RguTEgNPKHfTWw"]) assert len(photos) == 1 p = photos[0] assert p.keywords == ["Kids"] assert p.original_filename == "Pumkins2.jpg" assert p.filename == "Pumkins2.jpg" assert p.date == datetime.datetime( 2018, 9, 28, 16, 7, 7, 0, datetime.timezone(datetime.timedelta(seconds=-14400)) ) assert p.description == "Girl holding pumpkin" assert p.title == "I found one!" assert sorted(p.albums) == sorted( ["Pumpkin Farm", "AlbumInFolder", "Test Album (1)"] ) assert p.persons == ["Katie"] assert p.path.endswith( "/tests/Test-10.14.6.photoslibrary/Masters/2019/07/27/20190727-131650/Pumkins2.jpg" ) assert p.ismissing == False
Example #6
Source File: helpers.py From veripress with MIT License | 6 votes |
def timezone_from_str(tz_str): """ Convert a timezone string to a timezone object. :param tz_str: string with format 'Asia/Shanghai' or 'UTC±[hh]:[mm]' :return: a timezone object (tzinfo) """ m = re.match(r'UTC([+|-]\d{1,2}):(\d{2})', tz_str) if m: # in format 'UTC±[hh]:[mm]' delta_h = int(m.group(1)) delta_m = int(m.group(2)) if delta_h >= 0 else -int(m.group(2)) return timezone(timedelta(hours=delta_h, minutes=delta_m)) # in format 'Asia/Shanghai' try: return pytz.timezone(tz_str) except pytz.exceptions.UnknownTimeZoneError: return None
Example #7
Source File: cluster_backup_utils.py From KubeOperator with Apache License 2.0 | 6 votes |
def upload_backup_file(project_id,backup_storage_id): cluster = Cluster.objects.get(id=project_id) backup_storage = BackupStorage.objects.get(id=backup_storage_id) now =datetime.now().astimezone(timezone(timedelta(hours=8))).strftime('%Y-%m-%d %H:%M:%S') client = StorageClient(backup_storage) client.check_valid() file_name = cluster.name+'-'+str(now)+'.zip' file_remote_path = cluster.name+'/'+file_name result,message = client.upload_file("/etc/ansible/roles/cluster-backup/files/cluster-backup.zip",file_remote_path) if result: clusterBackup = ClusterBackup(name=file_name,size=10,folder=file_remote_path, backup_storage_id=backup_storage_id,project_id=project_id) clusterBackup.save() return True else: return False
Example #8
Source File: test_catalina_10_15_1.py From osxphotos with MIT License | 6 votes |
def test_attributes(): import datetime import osxphotos photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) photos = photosdb.photos(uuid=["D79B8D77-BFFC-460B-9312-034F2877D35B"]) assert len(photos) == 1 p = photos[0] assert p.keywords == ["Kids"] assert p.original_filename == "Pumkins2.jpg" assert p.filename == "D79B8D77-BFFC-460B-9312-034F2877D35B.jpeg" assert p.date == datetime.datetime( 2018, 9, 28, 16, 7, 7, 0, datetime.timezone(datetime.timedelta(seconds=-14400)) ) assert p.description == "Girl holding pumpkin" assert p.title == "I found one!" assert sorted(p.albums) == ["Multi Keyword", "Pumpkin Farm", "Test Album"] assert p.persons == ["Katie"] assert p.path.endswith( "tests/Test-10.15.1.photoslibrary/originals/D/D79B8D77-BFFC-460B-9312-034F2877D35B.jpeg" ) assert p.ismissing == False
Example #9
Source File: utils.py From ironpython3 with Apache License 2.0 | 6 votes |
def format_datetime(dt, usegmt=False): """Turn a datetime into a date string as specified in RFC 2822. If usegmt is True, dt must be an aware datetime with an offset of zero. In this case 'GMT' will be rendered instead of the normal +0000 required by RFC2822. This is to support HTTP headers involving date stamps. """ now = dt.timetuple() if usegmt: if dt.tzinfo is None or dt.tzinfo != datetime.timezone.utc: raise ValueError("usegmt option requires a UTC datetime") zone = 'GMT' elif dt.tzinfo is None: zone = '-0000' else: zone = dt.strftime("%z") return _format_timetuple_and_zone(now, zone)
Example #10
Source File: data.py From authenticator with MIT License | 6 votes |
def incremented_count(self): """Increment the counter and return the new value. Will update last_count() and last_count_update_time() properties. Only relevant if counter_from_time() is True. Returns: The incremented last_count value. """ from datetime import datetime self.__last_count += 1 # get the local time, with timezone # now = datetime.now(ClientData.tz()) self.set_last_count_update_time(now) return self.last_count()
Example #11
Source File: test_mojave_10_14_5.py From osxphotos with MIT License | 6 votes |
def test_attributes(): import datetime import osxphotos photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) photos = photosdb.photos(uuid=["15uNd7%8RguTEgNPKHfTWw"]) assert len(photos) == 1 p = photos[0] assert p.keywords == ["Kids"] assert p.original_filename == "Pumkins2.jpg" assert p.filename == "Pumkins2.jpg" assert p.date == datetime.datetime( 2018, 9, 28, 16, 7, 7, 0, datetime.timezone(datetime.timedelta(seconds=-14400)) ) assert p.description == "Girl holding pumpkin" assert p.title == "I found one!" assert p.albums == ["Pumpkin Farm"] assert p.persons == ["Katie"] assert p.path.endswith( "/tests/Test-10.14.5.photoslibrary/Masters/2019/07/27/20190727-131650/Pumkins2.jpg" ) assert p.ismissing == False
Example #12
Source File: utils.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def format_datetime(dt, usegmt=False): """Turn a datetime into a date string as specified in RFC 2822. If usegmt is True, dt must be an aware datetime with an offset of zero. In this case 'GMT' will be rendered instead of the normal +0000 required by RFC2822. This is to support HTTP headers involving date stamps. """ now = dt.timetuple() if usegmt: if dt.tzinfo is None or dt.tzinfo != datetime.timezone.utc: raise ValueError("usegmt option requires a UTC datetime") zone = 'GMT' elif dt.tzinfo is None: zone = '-0000' else: zone = dt.strftime("%z") return _format_timetuple_and_zone(now, zone)
Example #13
Source File: decoder_test.py From rets with MIT License | 6 votes |
def test_decode_time(): assert _decode_time('03:04:05', True) == time(3, 4, 5, tzinfo=timezone(timedelta(0))) # TODO: The standard specifies that the second fraction is limited to one # digit, however udatetime only permits 3 or 6 digits. assert _decode_time('03:04:05.600', True) == time(3, 4, 5, 600000, tzinfo=timezone(timedelta(0))) assert _decode_time('03:04:05Z', True) == time(3, 4, 5, tzinfo=timezone(timedelta(0))) assert _decode_time('03:04:05+00:00', True) == time(3, 4, 5, tzinfo=timezone(timedelta(0))) assert _decode_time('03:04:05-00:00', True) == time(3, 4, 5, tzinfo=timezone(timedelta(0))) assert _decode_time('03:04:05+07:08', True) == time(3, 4, 5, tzinfo=timezone(timedelta(hours=7, minutes=8))) assert _decode_time('03:04:05-07:08', True) == time(3, 4, 5, tzinfo=timezone(timedelta(hours=-7, minutes=-8))) assert _decode_time('03:04:05.600+07:08', True) == \ time(3, 4, 5, 600000, tzinfo=timezone(timedelta(hours=7, minutes=8))) assert _decode_time('03:04:05', False) == time(3, 4, 5) assert _decode_time('03:04:05.600', False) == time(3, 4, 5, 600000) assert _decode_time('03:04:05Z', False) == time(3, 4, 5) assert _decode_time('03:04:05+00:00', False) == time(3, 4, 5) assert _decode_time('03:04:05-00:00', False) == time(3, 4, 5) assert _decode_time('12:00:00+07:08', False) == time(4, 52) assert _decode_time('12:00:00-07:08', False) == time(19, 8)
Example #14
Source File: test_catalina_10_15_4.py From osxphotos with MIT License | 6 votes |
def test_attributes(): import datetime import osxphotos photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) photos = photosdb.photos(uuid=["D79B8D77-BFFC-460B-9312-034F2877D35B"]) assert len(photos) == 1 p = photos[0] assert p.keywords == ["Kids"] assert p.original_filename == "Pumkins2.jpg" assert p.filename == "D79B8D77-BFFC-460B-9312-034F2877D35B.jpeg" assert p.date == datetime.datetime( 2018, 9, 28, 16, 7, 7, 0, datetime.timezone(datetime.timedelta(seconds=-14400)) ) assert p.description == "Girl holding pumpkin" assert p.title == "I found one!" assert sorted(p.albums) == ["Pumpkin Farm", "Test Album"] assert p.persons == ["Katie"] assert p.path.endswith( "tests/Test-10.15.4.photoslibrary/originals/D/D79B8D77-BFFC-460B-9312-034F2877D35B.jpeg" ) assert p.ismissing == False
Example #15
Source File: tests.py From ciso8601 with MIT License | 6 votes |
def test_invalid_tz_offsets_too_large(self): # The Python interpreter crashes if you give the datetime constructor a TZ offset with an absolute value >= 1440 # TODO: Determine whether these are valid ISO 8601 values and therefore whether ciso8601 should support them. self.assertRaisesRegex( ValueError, # Error message differs whether or not we are using pytz or datetime.timezone r"^offset must be a timedelta strictly between" if sys.version_info.major >= 3 else r"\('absolute offset is too large', -5940\)", ciso8601.parse_datetime, '2018-01-01T00:00:00.00-99', ) self.assertRaisesRegex( ValueError, r"tzminute must be in 0..59", ciso8601.parse_datetime, '2018-01-01T00:00:00.00-23:60', )
Example #16
Source File: commands.py From AmbroBot with GNU General Public License v3.0 | 6 votes |
def retro_add(bot, update, args): if not args: update.message.reply_text( 'Tenes que agregar algo al retro bucket. `/retro mas recursos`', parse_mode='markdown', ) return retro_item = ' '.join(args) user = update.effective_user.first_name buenos_aires_offset = timezone(timedelta(hours=GMT_BUENOS_AIRES)) date = d.now(buenos_aires_offset) save_retro_item(retro_item, user, date) update.message.reply_text( '✅ Listo. Tu mensaje fue guardado para la retro.\n' 'Para recordarlo en la retro escribí `/retroitems`', parse_mode='markdown', ) logger.info("Retro event added: %s %s %s", user, retro_item, date)
Example #17
Source File: iso8601.py From pipenv with MIT License | 6 votes |
def parse_timezone(matches, default_timezone=UTC): """Parses ISO 8601 time zone specs into tzinfo offsets """ if matches["timezone"] == "Z": return UTC # This isn't strictly correct, but it's common to encounter dates without # timezones so I'll assume the default (which defaults to UTC). # Addresses issue 4. if matches["timezone"] is None: return default_timezone sign = matches["tz_sign"] hours = to_int(matches, "tz_hour") minutes = to_int(matches, "tz_minute", default_to_zero=True) description = "%s%02d:%02d" % (sign, hours, minutes) if sign == "-": hours = -hours minutes = -minutes return FixedOffset(hours, minutes, description)
Example #18
Source File: utils.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def localtime(dt=None, isdst=-1): """Return local time as an aware datetime object. If called without arguments, return current time. Otherwise *dt* argument should be a datetime instance, and it is converted to the local time zone according to the system time zone database. If *dt* is naive (that is, dt.tzinfo is None), it is assumed to be in local time. In this case, a positive or zero value for *isdst* causes localtime to presume initially that summer time (for example, Daylight Saving Time) is or is not (respectively) in effect for the specified time. A negative value for *isdst* causes the localtime() function to attempt to divine whether summer time is in effect for the specified time. """ if dt is None: return datetime.datetime.now(datetime.timezone.utc).astimezone() if dt.tzinfo is not None: return dt.astimezone() # We have a naive datetime. Convert to a (localtime) timetuple and pass to # system mktime together with the isdst hint. System mktime will return # seconds since epoch. tm = dt.timetuple()[:-1] + (isdst,) seconds = time.mktime(tm) localtm = time.localtime(seconds) try: delta = datetime.timedelta(seconds=localtm.tm_gmtoff) tz = datetime.timezone(delta, localtm.tm_zone) except AttributeError: # Compute UTC offset and compare with the value implied by tm_isdst. # If the values match, use the zone name implied by tm_isdst. delta = dt - datetime.datetime(*time.gmtime(seconds)[:6]) dst = time.daylight and localtm.tm_isdst > 0 gmtoff = -(time.altzone if dst else time.timezone) if delta == datetime.timedelta(seconds=gmtoff): tz = datetime.timezone(delta, time.tzname[dst]) else: tz = datetime.timezone(delta) return dt.replace(tzinfo=tz)
Example #19
Source File: test_utils.py From ironpython3 with Apache License 2.0 | 5 votes |
def test_localtime_epoch_utc_daylight_false(self): test.support.patch(self, time, 'daylight', False) t0 = datetime.datetime(1990, 1, 1, tzinfo = datetime.timezone.utc) t1 = utils.localtime(t0) t2 = t0 - datetime.timedelta(hours=5) t2 = t2.replace(tzinfo = datetime.timezone(datetime.timedelta(hours=-5))) self.assertEqual(t1, t2)
Example #20
Source File: utils.py From ironpython3 with Apache License 2.0 | 5 votes |
def parsedate_to_datetime(data): *dtuple, tz = _parsedate_tz(data) if tz is None: return datetime.datetime(*dtuple[:6]) return datetime.datetime(*dtuple[:6], tzinfo=datetime.timezone(datetime.timedelta(seconds=tz)))
Example #21
Source File: test_utils.py From ironpython3 with Apache License 2.0 | 5 votes |
def test_usegmt(self): utc_dt = datetime.datetime(*self.dateargs, tzinfo=datetime.timezone.utc) self.assertEqual(utils.format_datetime(utc_dt, usegmt=True), self.datestring + ' GMT')
Example #22
Source File: utils.py From ironpython3 with Apache License 2.0 | 5 votes |
def localtime(dt=None, isdst=-1): """Return local time as an aware datetime object. If called without arguments, return current time. Otherwise *dt* argument should be a datetime instance, and it is converted to the local time zone according to the system time zone database. If *dt* is naive (that is, dt.tzinfo is None), it is assumed to be in local time. In this case, a positive or zero value for *isdst* causes localtime to presume initially that summer time (for example, Daylight Saving Time) is or is not (respectively) in effect for the specified time. A negative value for *isdst* causes the localtime() function to attempt to divine whether summer time is in effect for the specified time. """ if dt is None: return datetime.datetime.now(datetime.timezone.utc).astimezone() if dt.tzinfo is not None: return dt.astimezone() # We have a naive datetime. Convert to a (localtime) timetuple and pass to # system mktime together with the isdst hint. System mktime will return # seconds since epoch. tm = dt.timetuple()[:-1] + (isdst,) seconds = time.mktime(tm) localtm = time.localtime(seconds) try: delta = datetime.timedelta(seconds=localtm.tm_gmtoff) tz = datetime.timezone(delta, localtm.tm_zone) except AttributeError: # Compute UTC offset and compare with the value implied by tm_isdst. # If the values match, use the zone name implied by tm_isdst. delta = dt - datetime.datetime(*time.gmtime(seconds)[:6]) dst = time.daylight and localtm.tm_isdst > 0 gmtoff = -(time.altzone if dst else time.timezone) if delta == datetime.timedelta(seconds=gmtoff): tz = datetime.timezone(delta, time.tzname[dst]) else: tz = datetime.timezone(delta) return dt.replace(tzinfo=tz)
Example #23
Source File: test_imaplib.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def timevalues(self): return [2000000000, 2000000000.0, time.localtime(2000000000), (2033, 5, 18, 5, 33, 20, -1, -1, -1), (2033, 5, 18, 5, 33, 20, -1, -1, 1), datetime.fromtimestamp(2000000000, timezone(timedelta(0, 2 * 60 * 60))), '"18-May-2033 05:33:20 +0200"']
Example #24
Source File: utils.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def parsedate_to_datetime(data): *dtuple, tz = _parsedate_tz(data) if tz is None: return datetime.datetime(*dtuple[:6]) return datetime.datetime(*dtuple[:6], tzinfo=datetime.timezone(datetime.timedelta(seconds=tz)))
Example #25
Source File: utils.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def formatdate(timeval=None, localtime=False, usegmt=False): """Returns a date string as specified by RFC 2822, e.g.: Fri, 09 Nov 2001 01:08:47 -0000 Optional timeval if given is a floating point time value as accepted by gmtime() and localtime(), otherwise the current time is used. Optional localtime is a flag that when True, interprets timeval, and returns a date relative to the local timezone instead of UTC, properly taking daylight savings time into account. Optional argument usegmt means that the timezone is written out as an ascii string, not numeric one (so "GMT" instead of "+0000"). This is needed for HTTP, and is only used when localtime==False. """ # Note: we cannot use strftime() because that honors the locale and RFC # 2822 requires that day and month names be the English abbreviations. if timeval is None: timeval = time.time() if localtime or usegmt: dt = datetime.datetime.fromtimestamp(timeval, datetime.timezone.utc) else: dt = datetime.datetime.utcfromtimestamp(timeval) if localtime: dt = dt.astimezone() usegmt = False return format_datetime(dt, usegmt)
Example #26
Source File: test_CLI.py From authenticator with MIT License | 5 votes |
def __init__(self, *args): """Constructor.""" from datetime import datetime, timezone, timedelta # figure the local timezone # lt = datetime.now() ut = datetime.utcnow() lt2 = datetime.now() if ut.second == lt2.second: lt = lt2 # Strip off the microseconds, or the deltatime won't be in # round seconds # lt = datetime( lt.year, lt.month, lt.day, lt.hour, lt.minute, lt.second) ut = datetime( ut.year, ut.month, ut.day, ut.hour, ut.minute, ut.second) # Get UTC offset as a timedelta object # dt = ut - lt dt = ut - lt # Get UTC offset in minutes # offset_minutes = 0 if (0 == dt.days): offset_minutes = dt.seconds // 60 else: dt = lt - ut offset_minutes = dt.seconds // 60 offset_minutes *= -1 dt = timedelta(minutes=offset_minutes) self.__tz = timezone(dt) self.devnull = open(os.devnull, "w") super().__init__(*args)
Example #27
Source File: data.py From authenticator with MIT License | 5 votes |
def set_last_count_update_time(self, update_time): """Set the timestamp of the last counter-based HOTP calculation. Only relevant if counter_from_time() is False. Args: update_time: either a datetime object (preferably with a timezone), or a string with time in ISO format "%Y%m%dT%H%M%S%z" """ from datetime import datetime if isinstance(update_time, datetime): self.__last_count_update_time = update_time.strftime(self._isoFmt) # Fix issue on some systems, e.g. Debian, where %Y doesn't zero-pad tpadding = "" if 10 > update_time.year: tpadding = "000" elif 100 > update_time.year: tpadding = "00" elif 1000 > update_time.year: tpadding = "0" if "0" != self.__last_count_update_time[0:1]: self.__last_count_update_time = tpadding + \ self.__last_count_update_time else: self.__last_count_update_time = update_time
Example #28
Source File: data.py From authenticator with MIT License | 5 votes |
def utz(): """UTC time zone.""" from datetime import timezone, timedelta if ClientData.__utz is None: ClientData.__utz = timezone(timedelta(0)) return ClientData.__utz
Example #29
Source File: metadata.py From py-slippi with MIT License | 5 votes |
def _parse(cls, json): d = json['startAt'].rstrip('\x00') # workaround for Nintendont/Slippi<1.5 bug # timezone & fractional seconds aren't always provided, so parse the date manually (strptime lacks support for optional components) m = [int(g or '0') for g in re.search(r'(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(?:Z|\+(\d{2})(\d{2}))?$', d).groups()] date = datetime(*m[:7], timezone(timedelta(hours=m[7], minutes=m[8]))) try: duration = 1 + json['lastFrame'] - evt.FIRST_FRAME_INDEX except KeyError: duration = None platform = cls.Platform(json['playedOn']) try: console_name = json['consoleNick'] except KeyError: console_name = None players = [None, None, None, None] for i in PORTS: try: players[i] = cls.Player._parse(json['players'][str(i)]) except KeyError: pass return cls(date=date, duration=duration, platform=platform, players=tuple(players), console_name=console_name)
Example #30
Source File: command.py From AmbroBot with GNU General Public License v3.0 | 5 votes |
def next_feriado(bot, update): today = datetime.now(tz=timezone(timedelta(hours=-3))) following_feriados = _get_next_feriados(today) if following_feriados: msg = next_feriado_message(today, next(following_feriados)) else: msg = 'No hay más feriados este año' update.message.reply_text(msg, parse_mode='markdown')