Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso Profesional de Python

Curso Profesional de Python

Facundo García Martoni

Facundo García Martoni

Time zones

20/21
Recursos

Aportes 68

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Excelente curso. ¡Aquí! les dejo los ejercicios y notas de toda esta tribología de Python (curso básico, intermedio y avanzado) en caso de que quieran revisar algo.
Suerte a todos 😃

Después de un par de días de pensar en algún proyecto he realizado un organizador de archivos, porque siempre mi carpeta de downloads esta toda desorganizada xd

al ejecutar el programa se ve asi

por ahora ha quedado así, espero seguir mejorándolo con el feedback que me puedan dar 😄

pd: aprender expresiones regulares es un mega poder.

link del repositorio de GitHub

No se me ocurrió nada excepcional así que solo hice un reloj XD

es simple solo cambia la hora y fecha presionando el botón que quieras

Si les gusto y si quieren jugar con el código o sienten curiosidad pueden verlo en mi github

Si quieres cambiar el nombre a una variable (refactorizar) en VS code, coloca el cursor en la definición, presiona f2 y escribe el nuevo nombre

Del video anterior a este paso un año XD

no por favor yo queria que nos pusiera un desafio usted, o pudo dejarnos un desafio libre y uno en especifico , noooooooo

Bueno, esto es lo que se me ocurrió hacer, no es mucho, pero es trabajo honesto:

from datetime import datetime
import pytz

def get_date_time_from_timezone(city_name:str, timezone:str)-> datetime:
  city_timezone = pytz.timezone(timezone)
  return datetime.now(city_timezone)


london = get_date_time_from_timezone("London", "Europe/London")
cdmx = get_date_time_from_timezone("LA", "America/Los_Angeles")


difference = london - cdmx
print(f'Diferencia entre London y CDMX: {difference}')

Antes de hacer el reto, dejo el código a modo de función para que sea más fácil de utilizar:

from datetime import datetime
import pytz

def get_date_time_from_timezone(city_name:str, timezone:str)-> str:
  city_timezone = pytz.timezone(timezone)
  city_time = datetime.now(city_timezone)
  print(f'{city_name}: {city_time.strftime("%d/%m/%Y, %H:%M:%S")}')


get_date_time_from_timezone("London", "Europe/London")
get_date_time_from_timezone("LA", "America/Los_Angeles")
get_date_time_from_timezone("CDMX", "America/Mexico_City")
get_date_time_from_timezone("Tokyo", "Asia/Tokyo")
get_date_time_from_timezone("Sydney", "Australia/Sydney")

Reto:
Es muy simple, y poco funcional, pero poco a poco veo que se me hace mas fácil hacer este tipo de programas.
Contexto
-El programa pregunta al usuario cuantos puntos quiere en el mapa, posterior genera las coordenadas aleatorias y las grafica consecuentemente generando un camino.
-Te muestra el tiempo que se demoro el proceso.
-Si “X” y “Y” son los mismos valores el programa la descarta.
-Cree un modulo únicamente para graficar.
-Trate de meter tipado, respetando los errores que me tiraba en consola con (“check-untyped-defs”)
CONCLUSION
Eso es todo, nada de otro mundo. Seguro esto se puede resumir muy bien en menos líneas y de manera mas elegante, supongo que es una habilidad que se gana con la práctica.

from datetime import datetime
import random
from graph import Graphics
from typing import List

def time_ejecution(func):
    def time_decorator(*args, **kwargs):
        init_time = datetime.now()
        
        func(*args, **kwargs)
        end_time = datetime.now()
        total_time = end_time - init_time

        print("Tiempo: ", total_time.total_seconds())

        return func(*args, **kwargs)

    return time_decorator


def random_coor() -> set:
    x: int = random.randint(1,100)
    y: int =  random.randint(1,100)

    return {x,y}


def even_or_odd(numbers) -> set:
    
    if len(numbers) % 2 != 0:
        numbers.pop()
    
    return numbers

@time_ejecution
def main():
    user_n_coor = int(input("Cuantas coordenadas?: "))
    coor_x: List[int] = []
    coor_y: List[int] = []
    for _ in range(user_n_coor):
        coor_x_y = list(even_or_odd(random_coor()))
        if len(coor_x_y) >= 2:
            coor_x.append(coor_x_y[0])
            coor_y.append(coor_x_y[1])
        else:
            print("Coordenada Incompleta")
    print("COORDENADAS: \n","\n X: ", coor_x,"\n Y:", coor_y)
    Graphics.graph(coor_x, coor_y)


if __name__ == '__main__':
    main()

MODULO PARA GRAFICAR

from bokeh.plotting import show, figure

class Graphics():
    def graph(x, y):
        draw = figure(title='RANDOM COOR', x_axis_label='X', y_axis_label='Y')
        draw.line(x, y, legend_label= ("Random"))
        show(draw)

Mi proyecto fue un programa que te permite crear y notificar de recordatorios que el usuario vaya añadiendo.

Si quieren checarlo aquí esta el repositorio de GitHub 😁

Reto - calcular execution time en formato especifico y determinar hora en un lugar especifico o local:
https://imgur.com/a/oGSQF8c

Por acá dejo la lista de las zonas horarias que maneja pytz https://gist.github.com/heyalexej/8bf688fd67d7199be4a1682b3eec7568

Este código ayuda a automatizar la tarea de compilar un código en C++ y ademas ordena sus archivos ejecutables.
También imprime con bonitos colores en la terminal.

import os 
import re
# This code works better with terminal command key extension in vscode

class Route:
    
    def __init__(self, route):
        self.route = route

    def find_cpp_file(self):
        self.route = self.route[::-1]
        my_file = "" 
        for i in self.route[1::]:
            if i !="/":
                my_file += i
            else:
                break
        return my_file[::-1]
    
    def delete_cpp_ext(self,cpp_file)->str:
        my_file_name = ""
        for i in cpp_file:
            if i != ".":
                my_file_name += i 
            else:
                break
        return my_file_name
    
    def get_file_type(self, my_file)->bool:
        return re.search("cpp", my_file)
#myfile.cpp

class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'

    def disable(self):
        self.HEADER = ''
        self.OKBLUE = ''
        self.OKGREEN = ''
        self.WARNING = ''
        self.FAIL = ''
        self.ENDC = ''

def foo():
    x = input("Here: ")
    print(x)

def main():
    promt = f"{bcolors.HEADER}Press cmd+h -->{bcolors.ENDC}"
    route_raw = input(promt)
    my_route = Route(route_raw)
    route_cpp = my_route.find_cpp_file()
    route_exe = my_route.delete_cpp_ext(route_cpp)
    print()
   
    if os.system("g++ {} -o bin/{}".format(route_cpp,route_exe)) == 0 :
        print(f"{bcolors.OKGREEN}----------------------{bcolors.ENDC}")
        print(f"{bcolors.OKGREEN}Compiled Successfully!{bcolors.ENDC}")
        print(f"{bcolors.OKGREEN}----------------------{bcolors.ENDC}")
        print('\n')
        os.system("./bin/{}".format(route_exe))
        print('\n')
    elif re.search("/",route_raw)== None:
        print(f"{bcolors.FAIL}---------------------------------------------{bcolors.ENDC}")
        print(f"{bcolors.FAIL}Press cmd+h or check your keyboard shortcuts.{bcolors.ENDC}")
        print(f"{bcolors.FAIL}---------------------------------------------{bcolors.ENDC}")
    elif (my_route.get_file_type(route_cpp)) == None:
        print(f"{bcolors.WARNING}------------------------------------------------------------------------{bcolors.ENDC}")
        print(f"{bcolors.WARNING}Only works for c++ files. Your active vscode file isn't a c++/.cpp file.{bcolors.ENDC}")
        print(f"{bcolors.WARNING}------------------------------------------------------------------------{bcolors.ENDC}")
    

    else:
        print(f"{bcolors.FAIL}----------------{bcolors.ENDC}")
        print(f"{bcolors.FAIL}Debug your code!{bcolors.ENDC}")
        print(f"{bcolors.FAIL}----------------{bcolors.ENDC}")

if __name__ == '__main__':
    main()
    

Descripción de lo que hice para el reto. No es algo que así no más funcione en la vida real, pero bueno, se me ocurrió para usar casi la totalidad de lo que se vio en el curso.
Lo que hace mi programa es mostrar un menú con dos opciones 1. Create file y 2. Show file y cada una hace literalmente eso jajaja. Cuestión que antes de hacerlo, valida si el usuario está logueado y cada una de estas funciones tiene un validador que se fija si el usuario ya se logueó antes y si lo hizo ver si su token de sesión es válido. Si no está logueado, pide hacerlo y luego muestra la fecha y hora del logeo.

import os
from datetime import datetime
import pytz

#Constantes solo para testeo :3
USERNAME = 'joacru'
PASSWORD = 'contra'
TOKEN = 'tokenrandomparatest'

class User:
  def __init__(self):
    self.username : str = None
    self.token : str = None

def login(func):
  def wrapper(*args, **kwargs):
    user : User = args[0]
    if user.token == None:
      username : str = input('Enter your username: ')
      password : str = input('Enter your password: ')
      assert username == USERNAME and password == PASSWORD, 'Invalid credentials.'
      user.token = TOKEN
      user.username = USERNAME
      jujuy_timezone = pytz.timezone('America/Argentina/Jujuy')
      session_datetime = datetime.now(jujuy_timezone)
      print(f'Welcome {user.username}! [{session_datetime.strftime("%d/%m/%Y %H:%M:%S")}]')
    if user.token != TOKEN:
      user.token = None
      assert False, 'Corrupted session.'
    func(*args, *kwargs)
  return wrapper

@login
def create_file(user : User):
  file_name : str = input('Enter the file name: ')
  file_content : str = input('Enter a text: ')
  with open('files/' + file_name, 'w') as file:
    file.write(file_content)
  print('File created successfully.')

@login
def list_files(user : User):
  for file in os.listdir('files'):
    print(file)

def run():
  user : User = User()
  while True:
    try:
      print('=====Menú=====')
      print('1. Create file')
      print('2. Show files')
      option = input('Option: ')
      if option == '1':
        create_file(user)
      elif option == '2':
        list_files(user)
      else:
        raise ValueError('Invalid option')
      input('=Presiona una tecla para continuar=')
    except Exception as e:
      print(e)

if __name__ == '__main__':
  run()
from datetime import datetime
import pytz

my_city_timezone = pytz.timezone('America/Bogota')
my_city_time = datetime.now(my_city_timezone)
print("Bogotá:", my_city_time.strftime("%d/%m/%Y, %H:%M:%S"))

my_city_timezone = pytz.timezone('America/Mexico_City')
my_city_time = datetime.now(my_city_timezone)
print("Ciudad de México:", my_city_time.strftime("%d/%m/%Y, %H:%M:%S"))

my_city_timezone = pytz.timezone('America/Caracas')
my_city_time = datetime.now(my_city_timezone)
print("Caracas:", my_city_time.strftime("%d/%m/%Y, %H:%M:%S"))

El código con funciones

from datetime import datetime
import pytz

def timezone(city: str):
    ciudad = city.lower().capitalize()
    timezone = pytz.timezone('America/'+ciudad)
    date = datetime.now(timezone)
    print('La hora requerida es:')
    print(f"{ciudad}: {date.strftime('%d/%m/%Y, %H:%M:%S')}")

def cities(func):
    def wrapper(*args, **kwargs):
        func(*args, **kwargs)
        print('Gracias por usar la aplicación, adios!!')
    return wrapper

@cities
def city_time():
    city = input('Ingresa la ciudad de la que quieres saber su hora: ')
    timezone(city)


if __name__ == '__main__':
    city_time()

yo no se hacer proyectos y programas 😦 no se como plantear cosas y asi

La hora en Madrid 😃

Hice una funcion para que imprima a como sea requerido, ejemplo en la forma de usa, en la forma de mexico, etc

from datetime import datetime
import pytz

def get_hora(zona_horaria, fecha = ['d', 'm', 'Y'] , hora = ['H', 'M', 'S']):
    zona = pytz.timezone(zona_horaria)
    now_zone = datetime.now(zona)
    zona_print = ''
    i = 0
    for imp in fecha:
        zona_print += now_zone.strftime(f'%{imp}') + '/'
    zona_print = zona_print[:-1] + ' '
    
    for imp in hora:
        zona_print += now_zone.strftime(f'%{imp}') + ':'
    zona_print = zona_print[:-1] + ' '
    return zona_print

def main():
    bogota = get_hora('America/Bogota')
    mexico = get_hora('America/Mexico_City', fecha = [])
    korea = get_hora('Asia/Seoul', fecha = ['Y', 'm', 'd'])
    madrid = get_hora('Europe/Madrid', fecha = ['m', 'd', 'Y'], hora = ['H', 'M'])

    print(f'Bogota: {bogota}')
    print(f'Mexico: {mexico}')
    print(f'Korea: {korea}')
    print(f'Madrid: {madrid}')
    
if __name__ == '__main__':
    main()
    

A mi me da diferente la hora de Colombia con la de México 🤔:

Les recomiendo este video de Tom Scott, habla sobre los problemas de los timezones 😂

https://www.youtube.com/watch?v=rksaoaqt3JA

Transforma el formato de una fecha que el usuario le manda u obtiene la fecha actual y la transforma.

from datetime import datetime
import pytz

def format_timezone(date_format: str = "%d/%m/%y %H:%M:%S", timezone: str ='America/Mexico_City', date: str='00/00/00 00:00:00') -> str:
    city_timezone = pytz.timezone(timezone)

    if date != '00/00/00 00:00:00':
        create_date = datetime.strptime(date, date_format)
    else:
        create_date = datetime.now(city_timezone)

    str_date = create_date.strftime(date_format)
    return str_date

mexico_date = '11/29/18 13:55:26'
mexico_timezone = 'America/Mexico_City'
print('-'*50)
print('Mandando una fecha')
print(format_timezone("%m/%d/%y %H:%M:%S", mexico_timezone, mexico_date)) #11/29/18 13:55:26
print('-'*50)
print('Obteniendo la fecha actual')
print(format_timezone("%m/%d/%y %H:%M:%S", mexico_timezone)) #08/03/21 21:30:04

Si alguien encuentra el código para Canarias se agradece.

Madrid:

Madrid_timezone = pytz.timezone("Europe/Madrid")
Madrid_date = datetime.now(Madrid_timezone)
print("Madrid: ", Madrid_date.strftime("%d/%m/%Y, %H:%M:%S"))

gracias por el curso

Por fin acabe la trilogía de Python gracias Platzi Day

Para saber mas acerca de “pytz” pueden dar clic Aquí.

En Caracas según el estandar estan en GMT-4 una hora mas tarde que Colombia y Mexico, pero en la realidad es GMT-4:30 es decir media hora más que Colombia y Mexico. Como dato curioso, hay paises con varios usos horarios debido a su extensión territorial por ejemplo EEUU
Chicago (GMT-5)
Denver (GMT-6)
Los Ángeles (GMT-7)
Anchorage (GMT-8)
Honolulu (GMT-10)

Digamos que no soy muy creativo así que simplemente volví a hacer el juego de adivinar el numero pero aplicando todo lo que hemos aprendido (manejo de errores, manejo de archivos, algo de POO, etc…), este es el repositorio, excelente curso por cierto, realmente adquirí amor hacia la programación

Les comparto algo de mi proyecto, aun falta mucho por mejorar, es una avance funcional:

La idea es que el usuario pueda usar hacer un estimado de la hora de inicio para hacer una reunión virtual en una locación con una zona horaria diferente.

Por si les interesa, de este modo podemos ver todas las zonas horarias en pytz

CONTAR LAS PALABRAS DE UN AUDIO
Tenía la curiosidad de saber que palabras se repiten mas en mis canciones favoritas, así que hice un programa para contar las palabras de un archivo de audio. Ahora funciona con solo audios de voz, pero espero poder mejorarlo para que extraiga las pistas de audio de la cancion entera (IA), se los dejo aquí:
Github Jona-vz

Excelentes cursos, les comparto mis notas hechas y Notion y el código en github.

Repositorio

Les comparto mi repositorio con un proyecto de todo lo aprendido
https://github.com/thonyblaz/ETL_newspaper

saludos

Este pequeño programa es de utilidad para mi trabajo como trader del mercado de forex y futuros. Dice cual es el horario actual en el que estoy operando teniendo en cuenta un diccionario con los horarios predefinidos.

from datetime import datetime
import pytz

# añado en un diccionario los open y close de cada killzone
kz_hours = {
        'Asia open': '17:00', 
        'Asia close': '23:00', 
        'London open': '02:00', 
        'London close': '05:00', 
        'NY open': '07:00', 
        'NY close': '11:00',
    }
# referencio la hora actual en mi zona y con base en el diccionario condiciono las horas de killzone
def killzone_hours(func): 
    def wrapper():
        
        print(' ')
        ny_timezone = pytz.timezone('America/New_York')
        ny_date = datetime.now(ny_timezone)
        ny = ny_date.strftime('%H:%M')
        print(f'* Current local hour with NY hour: {ny}')
        
        bogota_timezone = pytz.timezone('America/Bogota')
        bogota_date = datetime.now(bogota_timezone)
        bogota = bogota_date.strftime('%H:%M')
        print(f'* Current local hour: {bogota}')
        
        
        func()
        
        if bogota >= kz_hours['NY open']  and bogota <= kz_hours['NY close']:
            print('You are in the NY Killzone')
        elif bogota >= kz_hours['Asia open'] and bogota <= kz_hours['Asia close'] :
            print('You are in the Asian Killzone')
        elif bogota >= kz_hours['London open'] and bogota <= kz_hours['London close']:
            print('You are in the London Killzone')
        else:
            print('You are out of the trading hours')
    
    return wrapper
        
        
@killzone_hours
def run():
    print('-'*40)
    print('Current killzone: ')


if __name__ == '__main__':
    run()

Muy mal programa pero no se me que ocurrio otra cosa

from datetime import datetime
import pytz
import os

def run():
    os.system("clear")
    while True:
        place = input("\nPlace: ")

        os.system("clear")
        print(f"\nPlace: {place}")

        invalid_timezone = False
        while True:
            os.system("clear")
            if invalid_timezone is False:
                print(f"\nPlace: {place}")
                timezone = input("Timezone database name: ")
            else:
                print("\nPlease enter a valid timezone\n")
                timezone = input("Timezone database name: ")
                

            try:
                place_timezone = pytz.timezone(timezone)
                break
            except:
                invalid_timezone = True
                continue

        os.system("clear")
        print(f"\nPlace: {place}")
        print(f"Timezone database name: {timezone}")

        order = "%d/%m/%Y %H:%M:%S"

        invalid_input = False
        while True:
            if invalid_input is False:
                customize_order = input("Want to customize order? (default is %d/%m/%Y %H:%M:%S)[y/n]: ")
            else:
                os.system("clear")
                print("\nPlease enter y or n")
                customize_order = input("\nWant to customize order? (default is %d/%m/%Y %H:%M:%S)[y/n]: ")

            if customize_order == "y":
                os.system("clear")

                order = input("\nChoose order (If you submit something invalid you won't be provided with the right date and time): ")
                break

            elif customize_order == "n":
                break

            else:
                invalid_input = True
            
            

        os.system("clear")
        print(f"\nPlace: {place}")
        print(f"Timezone database name: {timezone}")

        if customize_order == "y":
            print(f"Custom order: ({order})")
        else:
            print(f"Default order: ({order})")

        place_date = datetime.now(place_timezone)

        print(f"\n{place}:", place_date.strftime(order), "\n")
        
        restart_exception = False
        while True:
            if restart_exception is False:
                print("_______________")
                restart = input("\nWant to execute again? (y/n): ")
            else: 
                os.system("clear")
                print("\nPlease answer with y or n")
                restart = input("\nWant to execute again? (y/n): ")

            if restart == "y":
                os.system("clear")
                break
            elif restart == "n":
                os.system("clear")
                quit()
            else:
                restart_exception = True

if __name__ == '__main__':
    run()

No he pensado que proyecto hacer pero mientras realizo el proyecto de Pensamiento Computacional les dejo proyectos que he realizado en Python y pronto también estos dos proyectos nuevos en mi github https://github.com/xhapa, Gracias al Facundo por esta trilogía de Python.

calculadora en python con tkinter y conexion mysql.

# -*- coding: utf-8 -*-
#Import the required Libraries
import mysql.connector
import tkinter as tk
from tkinter.messagebox import showerror, showwarning, showinfo
import PIL


class msql_connection:
    
    global db_cursor
    
    def __init__(self):
        
        self.CONNECTION = self.CONNECTION
        self.CREATED_NEW_RECORD = self.CREATED_NEW_RECORD
    
    def CONNECTION(self,user,psw):

        global db_connection
        
        try:
            db_connection = mysql.connector.connect(
                #
                    user=user,
                    host='localhost',
                    password=psw,
                    auth_plugin='mysql_native_password',
                    database='pruebas' 
                    )

            tk.messagebox.showinfo(title='MySQL are Connected', message='Connection successful!')
            db_cursor = db_connection.cursor()
            db_cursor.execute('USE pruebas;')
            #close de window 1
            win1=window2() # sirve
            return win1.win_cal() # sirve
            
            
            
        except:
            tk.messagebox.showerror(title='MySQL error', message='User or password are wrong!')
            
            
    #metodo CRUD
    def CREATED_NEW_RECORD(op,n1,n2,r1):
        global db_connection
        db_cursor = db_connection.cursor()
        db_cursor.execute('INSERT INTO pruebaCOLSEIN(operation,num1,num2,`Value`) values ("'+str(op)+'",'+str(n1)+','+str(n2)+','+str(r1)+');')
        
        
    def READ_RECORD():
        global db_connection
        db_cursor = db_connection.cursor()
        db_cursor.execute('(SELECT cal_id,operation,num1,num2,`Value` FROM pruebaCOLSEIN ORDER BY cal_id DESC LIMIT 5) ORDER BY cal_id ASC;')
        for db in db_cursor:
            print(db)
        return ''
  
class window2:

    #def __init__(self):
     #   self.win_cal = self.win_cal
        
    def win_cal(self, master = None):
        
        def __btn_sum():
            
            n1=int(str(lb1.get()))
            n2=int(str(lb2.get()))
            if type(n1) != int or type(n2) != int:
                tk.messagebox.showwarning(title='Error', message='no se pueden operar cosas distintas a los numeros!')
                lb1.delete(0,10)
                lb2.delete(0,10)
            else:
                r1=n1+n2
                op='Suma'
                msql_connection.CREATED_NEW_RECORD(op,n1,n2,r1)
                out_put=str(msql_connection.READ_RECORD())
                for i in out_put:
                    lb3.insert(tk.END,str(i)+ "\n")
                    #lb3.insert(tk.END,str(i) + "\n")
                lb1.delete(0,10)
                lb2.delete(0,10)
                
        def __btn_res():
            n1=int(str(lb1.get()))
            n2=int(str(lb2.get()))
            if type(n1) != int or type(n2) != int:
                tk.messagebox.showwarning(title='Error', message='no se pueden operar cosas distintas a los numeros!')
                lb1.delete(0,10)
                lb2.delete(0,10)
            else:
                r1=n1-n2
                op='Resta'
                msql_connection.CREATED_NEW_RECORD(op,n1,n2,r1)
                print(msql_connection.READ_RECORD())
                lb1.delete(0,10)
                lb2.delete(0,10)
                
        def __btn_div():
            n1=int(str(lb1.get()))
            n2=int(str(lb2.get()))
            if type(n1) != int or type(n2) != int:
                tk.messagebox.showwarning(title='Error', message='no se pueden operar cosas distintas a los numeros!')
                lb1.delete(0,10)
                lb2.delete(0,10)
            elif n2 == 0:
                tk.messagebox.showwarning(title='Error', message='no se puede dividir por cero!')
                lb1.delete(0,10)
                lb2.delete(0,10)
            else:
                r1=n1/n2
                op='Division'
                msql_connection.CREATED_NEW_RECORD(op,n1,n2,r1)
                print(msql_connection.READ_RECORD())
                lb1.delete(0,10)
                lb2.delete(0,10)
                
        def __btn_multi():
            n1=int(str(lb1.get()))
            n2=int(str(lb2.get()))
            if type(n1) != int or type(n2) != int:
                tk.messagebox.showwarning(title='Error', message='no se pueden operar cosas distintas a los numeros!')
                lb1.delete(0,10)
                lb2.delete(0,10)
            else:
                r1=n1*n2
                op='Multiplicacion'
                msql_connection.CREATED_NEW_RECORD(op,n1,n2,r1)
                print(msql_connection.READ_RECORD())
                lb1.delete(0,10)
                lb2.delete(0,10)
        
                
        top1 = tk.Tk()
        top1.geometry("950x350")
        #entradas de texto // Entry text
        lb1 = tk.Entry(top1)
        lb1.grid(row=0,column=1)
        lb2 = tk.Entry(top1)
        lb2.grid(row=1,column=1)
        
        lb3 = tk.Text(top1, width=80, height=10)
        lb3.grid(row=4,column=0)


        #s1.grid(row=4,column=0)
        
        #texto estatico// static text
        txt1 = tk.Label(top1 ,text = "ingrese el primer numero: ", font=("Arial Bold", 12))
        txt1.grid(row=0,column=0)
        txt2 = tk.Label(top1, text = "ingrese el segundo numero: ", font=("Arial Bold", 12))
        txt2.grid(row=1,column=0)
        #imegenes

        #button
        btn1 = tk.Button(top1,text = "Suma",font=("Arial Bold", 12),command = __btn_sum)
        btn1.grid(row=2,column=0)
        btn2 = tk.Button(top1,text = "Resta",font=("Arial Bold", 12),command = __btn_res)
        btn2.grid(row=2,column=1)
        btn3 = tk.Button(top1,text = "Multiplicacion",font=("Arial Bold", 12),command = __btn_multi)
        btn3.grid(row=3,column=0)
        btn4 = tk.Button(top1,text = "Division",font=("Arial Bold", 12),command = __btn_div)
        btn4.grid(row=3,column=1)
        

        
def window1():
    
    def __colect():
        user=str(lb1.get())    
        psw=str(lb2.get())
        a=msql_connection()
        a.CONNECTION(user,psw)
        top.destroy()  
        return None
    
    top = tk.Tk()
    top.geometry("350x100")
    
    #entradas de texto // Entry text
    lb1 = tk.Entry(top)
    lb1.grid(row=0,column=1)
    lb2 = tk.Entry(top,show="*")
    lb2.grid(row=1,column=1)
            
    #texto estatico// static text
    txt1 = tk.Label(top, text = "Insert user: ", font=("Arial Bold", 12))
    txt1.grid(row=0,column=0)
    txt2 = tk.Label(top, text = "Insert Passaword: ", font=("Arial Bold", 12))
    txt2.grid(row=1,column=0)
    
    #button
    btn1 = tk.Button(top,text = "Star mysql",font=("Arial Bold", 12), command = __colect )
    btn1.grid(row=2,column=1)
            
    #print(get_button())
    top.mainloop()
        
if __name__ == '__main__':
    #
    
    window1()
    
    ****

Reto conseguido:

from datetime import datetime
import pytz


# This function provides the welcome message to the user

def welcome():
    option: int = int(input("""
  =========================================
||Bienvenido a timezone calculator America||
  =========================================

En este programa se te permitira revisar la fecha y hora de los distintos paises de America, ya sea que desees revisar la fecha, la hora o ambas
asi como tambien, elegir el formato en el que quieres que se te muestre

Que deseas revisar?

1. Fecha
2. Hora
3. Fecha y hora

Ingresa una opcion: """))

    return option


# This function provides the date format options to the user
def format_message():
    option =  int(input("""

En que formato deseas imprimir la fecha?

1. Formato latino
2. Formato universal (Estadounidense)

Ingresa una opcion: """))

    return option



# This function provides a format to the date based on the user's selection

def format_date(country: str, option: int):
        date = pytz.timezone("America/" + country)
        date = datetime.now(date)

        if option == 1:
            print("Fecha en " + country + " : ", date.strftime("%d/%m/%Y"))
        elif option == 2:
            print("Fecha en " + country + " : ", date.strftime("%Y/%m/%d"))
        else:
            print(str(option) + " no es una opcion valida, por favor vuelve a intentar")



# This function covers the user's main choice
def calculate_time():
    option: int = welcome()
    
    country: str = input("""
Ingresa el nombre del pais que deseas revisar: """)

    country = country.capitalize()

    if option == 1:
        format_type: int = format_message()
        format_date(country, format_type)

    elif option == 2:
        time = pytz.timezone("America/" + country)
        time = datetime.now(time)
        print("La hora en " + country + " es: " + time.strftime('%H:%M:%S'))

    elif option == 3:
        date_time = pytz.timezone("America/" + country)
        date_time = datetime.now(date_time)
        date_format: int = int(format_message())

        if date_format == 1:
            print("La fecha y hora en " + country + " son: " + date_time.strftime("%d/%m/%Y, %H:%M:%S"))
        elif date_format == 2:
            print("La fecha y hora en " + country + " son: " + date_time.strftime("%Y/%m/%d, %H:%M:%S"))
        else:
            print(str(date_format) + " no es una opcion valida, por favor vuelve a intentar")

def main():
    calculate_time()


if __name__ == "__main__":
    main()

from datetime import datetime
import pytz

def timezones(some_zone: str):
city_timezone = pytz.timezone(some_zone)
city_date = datetime.now(city_timezone)
print(f’En {some_zone}: ', city_date.strftime("%d/%m/%Y, %H:%M:%S"))

def run():
timezones(“America/Bogota”)
timezones(“America/Mexico_City”)
timezones(“America/Caracas”)

if name == ‘main’:
run()

El mismo ejercicio del video pero con una función y opciones para elegir, es lo máximo que puedo hacer

from datetime import datetime
import pytz

def zona_horaria(zona):
    timezone = pytz.timezone(zona)
    date = datetime.now(timezone)
    print("Lo hora en: " + zona, date.strftime("%d/%m/%Y, %H:%M:%S"))

def run():
    print("Elige una opción \n Hora Bogotá presiona 1 \n Hora CDMX presiona 2 \n Hora Caracas presiona 3")
    while True:
        opcion = int(input("Escribe una zona horaria: "))
        if opcion == 1:
            zona_horaria("America/Bogota")
            break
        elif opcion == 2:
            zona_horaria("America/Mexico_City")
            break
        elif opcion == 3:
            zona_horaria("America/Caracas")
            break
        else:
            print("Escribe una opción válida")
        

if __name__ == '__main__':
    run()

El código compacto:

from datetime import datetime
import pytz


def timezones(clave: str, nombre: str):
    time_zone = pytz.timezone(clave)
    date = datetime.now(time_zone)
    return nombre + ' ' + date.strftime('%d/%m/%Y, %H:%M:%S')


if __name__ == '__main__':
    print(timezones('America/Bogota', 'Bogotá'))
    print(timezones('America/Mexico_City', 'México'))
    print(timezones('America/Caracas', 'Caracas'))

No es gran cosa … el programa limpia una lista con nombres repetidos, escoge un indice al azar, lo saluda y le da la fecha de Bogotá

from datetime import datetime
import pytz
import random


def set_change(any_list):
    
    final_set= set(any_list)
    list_change= list(final_set)
    selector= random.randint(0,4)
    name_chosen= list_change[selector]
    bogota_timezone= pytz.timezone("America/Bogota")
    bogota_datetime=datetime.now(bogota_timezone)
    
    return 'Hola ' + name_chosen + ' la fecha de hoy en Bogotá es: ' +bogota_datetime.strftime("%d/%m/%Y")

def run():
    run_func= set_change(["Diego","Paula","Fernando","Emma","Fernando","Paula","Carlos","Emma"])
    print(run_func)

if __name__ == '__main__':
    run()

from datetime import datetime

import pytz

fmt = '%Y-%m-%d %H:%M:%S %Z%z'

# Indian Standard Time
tz_india = pytz.timezone('Asia/Kolkata')
ist_local = tz_india.localize(datetime.now())
print("Indian Standard Time::", ist_local.strftime(fmt))

# Europe/Amsterdam Time
amdam_tz = pytz.timezone('Europe/Amsterdam')
dt = datetime(1983, 8, 3, 2, 0, 0)
cest_local = amdam_tz.localize(dt, is_dst=True)
print("Amsterdam with daylight saving time::", cest_local.strftime(fmt))

# Day Light Saving
print("Daylight saving time in amsterdam on 3/8/83::", cest_local.tzinfo.dst(cest_local))
import datetime
import pytz

# UTC timezone Datetime
dt_local = datetime.datetime.now(pytz.utc)
print("UTC DateTime:", dt_local.strftime("%Y:%m:%d %H:%M:%S %Z %z"))

# convert UTC timezone to 'US/Central'
dt_us_central = dt_local.astimezone(pytz.timezone('US/Central'))
print("US Central DateTime:", dt_us_central.strftime("%Y:%m:%d %H:%M:%S %Z %z"))

# Convert 'US/Central' timezone to US/Eastern
dt_us_eastern = dt_us_central.astimezone(pytz.timezone('America/New_York'))
print("US Eastern DateTime:", dt_us_eastern.strftime("%Y:%m:%d %H:%M:%S %Z %z"))

# Convert US/Eastern timezone to IST (India) timezone
dt_ind = dt_us_eastern.astimezone(pytz.timezone('Asia/Kolkata'))
print("India DateTime:", dt_ind.strftime("%Y:%m:%d %H:%M:%S %Z %z"))
from datetime import datetime
import pytz

# timezone: US Central Time
dt_us_central = datetime.now(pytz.timezone('America/Mexico_City'))
print("US Central DateTime:", dt_us_central.strftime("%Y:%m:%d %H:%M:%S %Z %z"))

# Get current TimeZone name
print(dt_us_central.tzname())

# Get UTC Offset
print(dt_us_central.utcoffset())

# Get the daylight saving time (DST offset) adjustment
print(dt_us_central.dst())
from datetime import datetime, timezone, timedelta

# naive
naive = datetime.now()
print("Naive DateTime:", naive)

# UTC aware
UTC = datetime.now(timezone.utc)
print("UTC DateTime", UTC)

# Creating a datetime with JST (Japan) TimeZone
jst_dateTime = datetime.now(timezone(timedelta(hours=+9), 'JST'))
print("In JST::", jst_dateTime)
from datetime import datetime
import pytz

datetime_india = datetime.now(pytz.timezone('Asia/Kolkata'))
print("Formatted DateTime in IST : ", datetime_india.strftime('%Y:%m:%d %H:%M:%S %Z %z'))
# Output 2021:07:08 17:53:23 IST +0530
from datetime import datetime
import pytz

unaware = datetime(2021, 6, 15, 8, 45, 17, 5)
print('Timezone naive:', unaware)

# Convert unaware Datetime to UTC timezone aware Datetime
aware = unaware.replace(tzinfo=pytz.UTC)
print(aware)
from datetime import datetime
import pytz

# current Datetime
unaware = datetime.now()
print('Timezone naive:', unaware)

# Standard UTC timezone aware Datetime
aware = datetime.now(pytz.utc)
print('Timezone Aware:', aware)

# US/Central timezone datetime
aware_us_central = datetime.now(pytz.timezone('US/Central'))
print('US Central DateTime', aware_us_central)

Muy buen curso. Gracias Facundo.

Incluyo mi programa:

from datetime import datetime
import pytz

# Paises disponibles por orden alfabético
timezones = {1: "Bogota",
             2: "Caracas",
             3: "Costa_Rica",
             4: "Mexico_City"
             }

def hora(city):
    pais = str("America/" + city)
    city_tz = pytz.timezone(pais)
    city_time = datetime.now(city_tz)
    time = city_time.strftime("%H:%M:%S") 
    return time

# Imprime lista de zonas disponibles para consulta
print("\nLista de zonas disponibles:\n")
for pais, codigo in timezones.items():
    print(pais, "->", codigo)
print("\n")

def run():
    seleccion = int(input("Incluya el número de la zona para consultar la hora: "))
    zona = timezones[seleccion]
    my_hora = hora(zona)
    print(f"\nLa hora en {zona} es {my_hora} \n")

if __name__ == '__main__':
    try:
        run()
    except:
        print("\nEl dato incluido no es un número o es un código no disponible.\n")

A seguir practicando

Excelente curso! ya termine todas las sagas de Python y las de FastAPI , Facuendo eres el mejor bro, me gustaria en las proximas entregas, un curso de POO y uno de Flask combinado con la implementacion de alguna API y conectado a una db.

Compas los timezones están en el mismo módulo pytz al final del todo.

Aquí un pedazo de los de america :

[ 'America/Adak',
 'America/Anchorage',
 'America/Anguilla',
 'America/Antigua',
 'America/Araguaina',
 'America/Argentina/Buenos_Aires',
 'America/Argentina/Catamarca',
 'America/Argentina/ComodRivadavia',
 'America/Argentina/Cordoba',
 'America/Argentina/Jujuy',
 'America/Argentina/La_Rioja',
 'America/Argentina/Mendoza',
 'America/Argentina/Rio_Gallegos',
 'America/Argentina/Salta',
 'America/Argentina/San_Juan',
 'America/Argentina/San_Luis',
 'America/Argentina/Tucuman',
 'America/Bogota',
 'America/Boise',
 'America/Buenos_Aires',
 'America/Cambridge_Bay',
 'America/Campo_Grande',
 'America/Cancun',
 'America/Caracas',
 'America/Catamarca',
 'America/Cayenne',
 'America/Cayman',
 'America/Chicago',
 'America/Chihuahua',
 'America/Coral_Harbour',
 'America/Cordoba',
 'America/Costa_Rica',
 'America/Denver',
 'America/Detroit',
 'America/Dominica',
 'America/Edmonton',
 'America/Eirunepe',
 'America/El_Salvador',
 'America/Ensenada',
 'America/Fort_Nelson',
 'America/Fort_Wayne',
 'America/Fortaleza',
 'America/Glace_Bay',
 'America/Godthab',
 'America/Goose_Bay',
 'America/Grand_Turk',
 'America/Grenada',
 'America/Guadeloupe',
 'America/Guatemala',
 'America/Guayaquil',
 'America/Guyana',
 'America/Halifax',
 'America/Havana',
 'America/Jamaica',
 'America/Jujuy',
 'America/Juneau',
 'America/Kentucky/Louisville',
 'America/Kentucky/Monticello',
 'America/Knox_IN',
 'America/Kralendijk',
 'America/La_Paz',
 'America/Lima',
 'America/Los_Angeles',
 'America/Louisville',
 'America/Lower_Princes',
 'America/Maceio',
 'America/Managua',
 'America/Manaus',
 'America/Marigot',
 'America/Martinique',
 'America/Matamoros',
 'America/Mazatlan',
 'America/Mendoza',
 'America/Menominee',
 'America/Merida',
 'America/Metlakatla',
 'America/Mexico_City',
 'America/Miquelon',
 'America/Moncton',
 'America/Monterrey',
 'America/Montevideo',
 'America/Montreal',
 'America/Montserrat',
 'America/Nassau',
 'America/New_York',
 'America/Nipigon',
 'America/Nome',
 'America/Noronha',
 'America/North_Dakota/Beulah',
 'America/North_Dakota/Center',
 'America/North_Dakota/New_Salem',
 'America/Nuuk',
 'America/Ojinaga',
 'America/Panama',
 'America/Pangnirtung',
 'America/Paramaribo',
 'America/Phoenix',
 'America/Rosario',
 'America/Santa_Isabel',
 'America/Santarem',
 'America/Santiago',
 'America/Santo_Domingo',
 'America/Sao_Paulo',
 'America/St_Barthelemy',
 'America/St_Johns',
 'America/St_Kitts',
 'America/St_Lucia',
 'America/St_Thomas',
 'America/St_Vincent',
 'America/Swift_Current',
 'America/Tegucigalpa',
 'America/Thule',
 'America/Thunder_Bay',
 'America/Tijuana',
 'America/Toronto',
 'America/Tortola',
 'America/Vancouver',

Gracias por enseñarnos esto ultimo, cuando haga un proyecto volveré y dejaré el enlace acá

Utilizar zonas horarias con el modulo que no es nativo pytz

Comparto la solución al gran desafío de toda la saga de Python con este proyecto aplicando conversión de tipos, entrada/salida de datos, condicionales múltiples, ciclos, listas, matrices, funciones, lambdas, manejo de archivos, excepciones, y una integración con los módulos json, sqlite3 y prettytable, por favor dejen su estrellita en GitHub, muchas gracias por valorar mi trabajo.

Bogotá presente en el curso profesional de Python!

CODIGO DE LA CLASE

from datetime import datetime
import pytz

bogota_timezone = pytz.timezone("America/Bogota")
bogota_date = datetime.now(bogota_timezone)
print("Bogota: ", bogota_date.strftime("%d/%m/%Y, %H:%M:%S"))

mexico_timezone = pytz.timezone("America/Mexico_City")
mexico_date = datetime.now(mexico_timezone)
print("Ciudad de Mexico: ", mexico_date.strftime("%d/%m/%Y, %H:%M:%S"))

caracas_timezone = pytz.timezone("America/Caracas")
caracas_date = datetime.now(caracas_timezone)
print("Caracas: ", caracas_date.strftime("%d/%m/%Y, %H:%M:%S"))
from datetime import datetime
import pytz

bogota = pytz.timezone('America/Bogota')
bogota_date = datetime.now(tz=bogota)
print("Bogota: ", bogota_date.strftime("%A %d %B %Y %H:%M:%S %Z%z"))

mexico = pytz.timezone('America/Mexico_City')
mexico_date = datetime.now(tz=mexico)
print("Mexico: ", mexico_date.strftime("%A %d %B %Y %H:%M:%S %Z%z"))

caracas = pytz.timezone('America/Caracas')
caracas_date = datetime.now(tz=caracas)
print("Caracas: ", mexico_date.strftime("%A %d %B %Y %H:%M:%S %Z%z"))

Wow que grandes aportes los de esta sección “Bonus”, me encantó el curso

otro error que descubrí es que al llamar al archivo “datetime” te va a arrojar un error no solo en ese archivo, si no que en cualquiera que importe _datetime

Y bueno, hasta aquí ha llegado la saga…

Para no copiar y pegar código pueden hacer una función para solo ingresar la zona horaria:

#A function to optimize
def time_zone_now(zone):
    tz = pytz.timezone(zone)
    tz_date = datetime.now(tz)
    print(zone, ': ', tz_date.strftime('%d/%m/%Y, %H:%M:%S'))

def run():
    time_zone_now('Pacific/Galapagos')

if __name__ == '__main__':
    run()

Es trabajo humilde pero honesto:

Aquí está el repositorio: https://github.com/dereksamuel/profesional_py/blob/master/ULTIMATE_CHALLENGE.py

Ahi con la funcion:

from datetime import datetime

# permite trabajar con timezones
import pytz


def city_time(city):
    city_time = pytz.timezone(city)
    city_date = datetime.now(city_time).strftime("%d/%m/%Y, %H:%M:%S")
    print(f"En la ciudad {city} son las: {city_date}")


if __name__ == "__main__":
    city_time("America/Bogota")
    city_time("America/Mexico_City")
    city_time("America/Caracas")

# bogota_timezone = pytz.timezone("America/Bogota")
# bogota_date = datetime.now(bogota_timezone)
# print("Bogota: ", bogota_date.strftime("%d/%m/%Y, %H:%M:%S"))

Bogotá: 18/10/2021, 21:51:35
Ciudad de México: 18/10/2021, 21:51:35
Caracas: 18/10/2021, 22:51:35