mirror of
https://github.com/Asabeneh/30-Days-Of-Python.git
synced 2026-06-03 21:02:42 +08:00
192 lines
6.0 KiB
Markdown
192 lines
6.0 KiB
Markdown
# 30 Días de Python: Día 16 - datetime en Python
|
|
|
|
- [Día 16](#-día-16)
|
|
- [Python *datetime*](#python-datetime)
|
|
- [Obtener información de *datetime*](#obtener-información-de-datetime)
|
|
- [Formatear fecha con *strftime*](#formatear-fecha-con-strftime)
|
|
- [Convertir cadena a fecha con *strptime*](#convertir-cadena-a-fecha-con-strptime)
|
|
- [Usar *date* desde *datetime*](#usar-date-desde-datetime)
|
|
- [Representar tiempo con objetos *time*](#representar-tiempo-con-objetos-time)
|
|
- [Calcular la diferencia entre dos puntos en el tiempo](#calcular-la-diferencia-entre-dos-puntos-en-el-tiempo)
|
|
- [Calcular diferencias con *timedelta*](#calcular-diferencias-con-timedelta)
|
|
- [💻 Ejercicios - Día 16](#-ejercicios---día-16)
|
|
|
|
# 📘 Día 16
|
|
|
|
## Python *datetime*
|
|
|
|
Python tiene un módulo _datetime_ para trabajar con fechas y horas.
|
|
|
|
```py
|
|
import datetime
|
|
print(dir(datetime))
|
|
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo']
|
|
```
|
|
|
|
Con los comandos incorporados dir o help puedes ver las funciones disponibles de un módulo. Como ves, el módulo datetime tiene muchas clases y funciones; nos centraremos en _date_, _datetime_, _time_ y _timedelta_. Veámoslas una a una.
|
|
|
|
### Obtener información de *datetime*
|
|
|
|
```py
|
|
from datetime import datetime
|
|
now = datetime.now()
|
|
print(now) # 2021-07-08 07:34:46.549883
|
|
day = now.day # 8
|
|
month = now.month # 7
|
|
year = now.year # 2021
|
|
hour = now.hour # 7
|
|
minute = now.minute # 38
|
|
second = now.second
|
|
timestamp = now.timestamp()
|
|
print(day, month, year, hour, minute)
|
|
print('timestamp', timestamp)
|
|
print(f'{day}/{month}/{year}, {hour}:{minute}') # 8/7/2021, 7:38
|
|
```
|
|
|
|
El timestamp, o Unix timestamp, es el número de segundos transcurridos desde el 1 de enero de 1970 UTC.
|
|
|
|
### Formatear fecha con *strftime*
|
|
|
|
```py
|
|
from datetime import datetime
|
|
new_year = datetime(2020, 1, 1)
|
|
print(new_year) # 2020-01-01 00:00:00
|
|
day = new_year.day
|
|
month = new_year.month
|
|
year = new_year.year
|
|
hour = new_year.hour
|
|
minute = new_year.minute
|
|
second = new_year.second
|
|
print(day, month, year, hour, minute) #1 1 2020 0 0
|
|
print(f'{day}/{month}/{year}, {hour}:{minute}') # 1/1/2020, 0:0
|
|
|
|
```
|
|
|
|
Usa el método *strftime* para formatear fechas y horas; la documentación de formatos está [aquí](https://strftime.org/).
|
|
|
|
```py
|
|
from datetime import datetime
|
|
# fecha y hora actual
|
|
now = datetime.now()
|
|
t = now.strftime("%H:%M:%S")
|
|
print("Hora:", t)
|
|
time_one = now.strftime("%m/%d/%Y, %H:%M:%S")
|
|
# formato mm/dd/YY H:M:S
|
|
print("Formato uno:", time_one)
|
|
time_two = now.strftime("%d/%m/%Y, %H:%M:%S")
|
|
# formato dd/mm/YY H:M:S
|
|
print("Formato dos:", time_two)
|
|
```
|
|
|
|
```sh
|
|
Hora: 01:05:01
|
|
Formato uno: 12/05/2019, 01:05:01
|
|
Formato dos: 05/12/2019, 01:05:01
|
|
```
|
|
|
|
A continuación se muestran los símbolos de _strftime_ usados para formatear tiempos, como se ve en la imagen de referencia.
|
|
|
|

|
|
|
|
### Convertir cadena a fecha con *strptime*
|
|
Aquí hay una [guía](https://www.programiz.com/python-programming/datetime/strptimet) que ayuda a entender los formatos.
|
|
|
|
```py
|
|
from datetime import datetime
|
|
date_string = "5 December, 2019"
|
|
print("date_string =", date_string)
|
|
date_object = datetime.strptime(date_string, "%d %B, %Y")
|
|
print("date_object =", date_object)
|
|
```
|
|
|
|
```sh
|
|
date_string = 5 December, 2019
|
|
date_object = 2019-12-05 00:00:00
|
|
```
|
|
|
|
### Usar *date* desde *datetime*
|
|
|
|
```py
|
|
from datetime import date
|
|
d = date(2020, 1, 1)
|
|
print(d)
|
|
print('Fecha actual:', d.today()) # fecha actual
|
|
# objeto date de hoy
|
|
today = date.today()
|
|
print("Año actual:", today.year) # 2019
|
|
print("Mes actual:", today.month) # 12
|
|
print("Día actual:", today.day) # 5
|
|
```
|
|
|
|
### Representar tiempo con objetos *time*
|
|
|
|
```py
|
|
from datetime import time
|
|
# time(hour = 0, minute = 0, second = 0)
|
|
a = time()
|
|
print("a =", a)
|
|
# time(hour, minute y second)
|
|
b = time(10, 30, 50)
|
|
print("b =", b)
|
|
# time(hour, minute y second)
|
|
c = time(hour=10, minute=30, second=50)
|
|
print("c =", c)
|
|
# time(hour, minute, second, microsecond)
|
|
d = time(10, 30, 50, 200555)
|
|
print("d =", d)
|
|
```
|
|
|
|
Salida:
|
|
a = 00:00:00
|
|
b = 10:30:50
|
|
c = 10:30:50
|
|
d = 10:30:50.200555
|
|
|
|
### Calcular la diferencia entre dos puntos en el tiempo
|
|
|
|
```py
|
|
today = date(year=2019, month=12, day=5)
|
|
new_year = date(year=2020, month=1, day=1)
|
|
time_left_for_newyear = new_year - today
|
|
# Tiempo hasta año nuevo: 27 days, 0:00:00
|
|
print('Tiempo hasta año nuevo: ', time_left_for_newyear)
|
|
|
|
t1 = datetime(year = 2019, month = 12, day = 5, hour = 0, minute = 59, second = 0)
|
|
t2 = datetime(year = 2020, month = 1, day = 1, hour = 0, minute = 0, second = 0)
|
|
diff = t2 - t1
|
|
print('Tiempo hasta año nuevo:', diff) # Tiempo hasta año nuevo: 26 days, 23:01:00
|
|
```
|
|
|
|
### Calcular diferencias con *timedelta*
|
|
|
|
```py
|
|
from datetime import timedelta
|
|
t1 = timedelta(weeks=12, days=10, hours=4, seconds=20)
|
|
t2 = timedelta(days=7, hours=5, minutes=3, seconds=30)
|
|
t3 = t1 - t2
|
|
print("t3 =", t3)
|
|
```
|
|
|
|
```sh
|
|
date_string = 5 December, 2019
|
|
date_object = 2019-12-05 00:00:00
|
|
t3 = 86 days, 22:56:50
|
|
```
|
|
|
|
🌕 Eres increíble. Has avanzado 16 pasos hacia la excelencia. Ahora haz algunos ejercicios para entrenar tu mente y tus manos.
|
|
|
|
## 💻 Ejercicios - Día 16
|
|
|
|
1. Obtén el día, mes, año, hora, minuto y timestamp actuales desde el módulo datetime.
|
|
2. Formatea la fecha actual con el formato: "%m/%d/%Y, %H:%M:%S"
|
|
3. Hoy es 5 de diciembre de 2019. Convierte esa cadena de fecha a un objeto datetime.
|
|
4. Calcula la diferencia entre ahora y el próximo año nuevo.
|
|
5. Calcula la diferencia entre el 1 de enero de 1970 y ahora.
|
|
6. Piensa: ¿para qué puedes usar el módulo datetime? Por ejemplo:
|
|
- Análisis de series temporales
|
|
- Obtener timestamps para eventos en una aplicación
|
|
- Añadir la fecha de publicación en un blog
|
|
|
|
🎉 ¡Felicidades! 🎉
|
|
|
|
[<< Día 15](./15_python_type_errors_sp.md) | [Día 17 >>](./17_exception_handling_sp.md) |