Created
January 30, 2024 00:41
-
-
Save itarocha/7fbd9eebdb05f4afd7978a503dbdf19a to your computer and use it in GitHub Desktop.
Brincadeiras com datas
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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