Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Datas e Fusos em Python

Avatar for Nilo Ney Coutinho Menezes Nilo Ney Coutinho Menezes
February 06, 2016
40

Datas e Fusos em Python

Fusos horários com Python

Avatar for Nilo Ney Coutinho Menezes

Nilo Ney Coutinho Menezes

February 06, 2016
Tweet

More Decks by Nilo Ney Coutinho Menezes

Transcript

  1. Por que datas e fusos? • Na região Norte temos

    3 fusos horários • Se considerarmos o resto do país, teremos de 4 a 5 fusos dependendo do horário de verão • A Internet faz a manipulação de datas se tornar um problema frequente e normal
  2. Detalhes • Para trabalhar com fuso horários, você precisa de

    datetime. Uma data sozinha não tem fuso. A hora sozinha também não
  3. Primeiros passos • Nomes de zona: >>> import pytz >>>

    from datetime import * >>> pytz.country_timezones["br"] ['America/Noronha', 'America/Belem', 'America/Fortaleza', 'America/Recife', 'America/Araguaina', 'America/Maceio', 'America/Bahia', 'America/Sao_Paulo', 'America/Campo_Grande', 'America/Cuiaba', 'America/Santarem', 'America/Porto_Velho', 'America/Boa_Vista', 'America/Manaus', 'America/Eirunepe', ‘America/Rio_Branco’] >>> manaus=pytz.timezone(“America/Manaus”) >>> datetime.now(tz=manaus) datetime.datetime(2016, 2, 6, 12, 42, 9, 901063, tzinfo=<DstTzInfo 'America/Manaus' AMT-1 day, 20:00:00 STD>) >>> [k for k in pytz.all_timezones if k.startswith("Br")] ['Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West']
  4. Convertendo • Hora sem informação de zona >>> datetime.now() datetime.datetime(2016,

    2, 6, 17, 42, 15, 818676) • Adiciona informação de zona >>> datetime.now(tz=pytz.utc) datetime.datetime(2016, 2, 6, 16, 42, 30, 365507, tzinfo=<UTC>)
  5. Criando as zonas >>> manaus = pytz.timezone(“America/Manaus”) >>> belem =

    pytz.timezone(“America/Belem”) >>> datetime.now(tz=belem) datetime.datetime(2016, 2, 6, 13, 45, 20, 764109, tzinfo=<DstTzInfo 'America/Belem' BRT-1 day, 21:00:00 STD>) datetime.now(tz=manaus) datetime.now(tz=pytz.utc) datetime.now()
  6. Convertendo >>> agora = datetime.now(tz=pytz.utc) datetime.datetime(2016, 2, 6, 16, 46,

    29, 808149, tzinfo=<UTC>) >>> agora.astimezone(manaus) datetime.datetime(2016, 2, 6, 12, 46, 29, 808149, tzinfo=<DstTzInfo 'America/Manaus' AMT-1 day, 20:00:00 STD>) >>> agora.astimezone(belem) datetime.datetime(2016, 2, 6, 13, 46, 29, 808149, tzinfo=<DstTzInfo 'America/Belem' BRT-1 day, 21:00:00 STD>) >>> manaus.normalize(agora) datetime.datetime(2016, 2, 6, 12, 46, 29, 808149, tzinfo=<DstTzInfo 'America/Manaus' AMT-1 day, 20:00:00 STD>) >>> belem.normalize(agora) datetime.datetime(2016, 2, 6, 13, 46, 29, 808149, tzinfo=<DstTzInfo 'America/Belem' BRT-1 day, 21:00:00 STD>)
  7. Operações timedelta(minutes=5) >>> agora = datetime.now(tz=manaus) datetime.datetime(2016, 2, 6, 12,

    49, 16, 798101, tzinfo=<DstTzInfo 'America/Manaus' AMT-1 day, 20:00:00 STD>) >>> agora + timedelta(minutes=10) datetime.datetime(2016, 2, 6, 12, 59, 16, 798101, tzinfo=<DstTzInfo 'America/Manaus' AMT-1 day, 20:00:00 STD>) >>> agora2 = datetime.now(tz=belem) datetime.datetime(2016, 2, 6, 13, 50, 9, 78355, tzinfo=<DstTzInfo 'America/Belem' BRT-1 day, 21:00:00 STD>) >>> agora2 - agora datetime.timedelta(0, 52, 280254)
  8. python-dateutil >>> from dateutil.relativedelta import relativedelta >>> datetime.now(tz=pytz.utc) + relativedelta(months=1)

    datetime.datetime(2016, 3, 6, 16, 51, 55, 811080, tzinfo=<UTC>) >> datetime.now(tz=pytz.utc) + relativedelta(day=31, months=2) datetime.datetime(2016, 4, 30, 16, 52, 31, 801024, tzinfo=<UTC>)
  9. Próximos hangouts >>> from dateutil.rrule import * >>> from datetime

    import datetime >>> list(rrule(MONTHLY, count=4, byweekday=(SA(+1)), dtstart=datetime.now())) [datetime.datetime(2016, 2, 6, 18, 4, 52), datetime.datetime(2016, 3, 5, 18, 4, 52), datetime.datetime(2016, 4, 2, 18, 4, 52), datetime.datetime(2016, 5, 7, 18, 4, 52)] • python-dateutil: • Autor: Gustavo Niemeyer • https://labix.org/python-dateutil