Skip to content

Instantly share code, notes, and snippets.

@itarocha
Created January 30, 2024 00:41
Show Gist options
  • Save itarocha/7fbd9eebdb05f4afd7978a503dbdf19a to your computer and use it in GitHub Desktop.
Save itarocha/7fbd9eebdb05f4afd7978a503dbdf19a to your computer and use it in GitHub Desktop.
Brincadeiras com datas
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
formato_br = "%d/%m/%Y %H:%M:%S"
formato_db = "%Y-%m-%d %H:%M:%S"
formato_db_date = "%Y-%m-%d"
def agora_local():
return datetime.now()
def agora_utd_iso():
return datetime.utcnow().isoformat()
def agora_utc():
return datetime.utcnow()
def subtrair_horas(d, horas):
return d - timedelta(hours=horas)
def formatar_data_iso(d):
return d.isoformat()
def formatar_data_br(d):
return d.strftime(formato_br)
def formatar_data_db(d):
return d.strftime(formato_db)
def formatar_data_db_date(d):
return d.strftime(formato_db_date)
def diferenca_dias(d1, d2):
d1 = datetime.strptime(d1, formato_br)
d2 = datetime.strptime(d2, formato_br)
return abs((d2 - d1).days * 24)
def teste_geral():
agora = agora_utc()
agora = agora.replace(second=0, microsecond=0)
print(formatar_data_br(agora))
antes = subtrair_horas(agora, 24)
print(formatar_data_br(antes))
print(formatar_data_db(antes))
print(formatar_data_iso(antes))
agora = agora_utc()
antes = subtrair_horas(agora, 24)
data_hora_fmt = formatar_data_iso(antes)
print(f"Agora sao {agora}. Excluindo ultimas 24 horas: {data_hora_fmt}")
def teste_periodo_mes():
agora = agora_utc()
primeiro = agora.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
ultimo = primeiro + relativedelta(months=+1, days=-1)
print(formatar_data_br(agora))
print(formatar_data_db_date(primeiro))
print(formatar_data_db_date(ultimo))
def prd_mes_in(d):
# retorna primeiro e último dias dentro do mês
primeiro = d.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
ultimo = primeiro + relativedelta(months=+1, days=-1)
return {
"primeiro_dia": primeiro,
"ultimo_dia": ultimo
}
def prd_mes_out(d):
# retorna primeiro dia do mês e primeiro dia do mês subsequente
primeiro = d.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
ultimo = primeiro + relativedelta(months=+1)
return {
"primeiro_dia": primeiro,
"ultimo_dia": ultimo
}
def show_dias():
print("-----------------------------")
hoje = datetime(year=2022, month=1, day=1)
for i in range(0, 366):
d = hoje + relativedelta(days=+i)
p = prd_mes_out(d)
print(f'{formatar_data_db_date(d)} -> ('
f'{formatar_data_db_date(p["primeiro_dia"])} - '
f'{formatar_data_db_date(p["ultimo_dia"])}) ')
if __name__ == "__main__":
teste_periodo_mes()
show_dias()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment