Fecha y hora año y mes actuales en Python

90

Debo tener el año y el mes actuales en datetime.

Yo uso esto:

datem = datetime.today().strftime("%Y-%m")
datem = datetime.strptime(datem, "%Y-%m")

¿Hay tal vez otra forma?

usuario3778327
fuente
Qué quiere decir date.today().strftime("%Y-%m")?
00schneider

Respuestas:

114

Utilizar:

from datetime import datetime
today = datetime.today()
datem = datetime(today.year, today.month, 1)

Supongo que quieres el primero del mes.

llogiq
fuente
1
@ user3778327: la todayvariable ya tiene el año y el mes actuales.
jfs
18
Para esta solución, asegúrese de usar en from datetime import datetimelugar de simplementeimport datetime
jpobst
@jpobst Estoy usando Python 3.8.1 & datetime-4.3 zope.interface-4.7.1, y el código anterior (con import datetime ) me funciona. Si escribo desde datetime import datetime , me arroja AttributeError: type object 'datetime.datetime' no tiene atributo 'datetime'
jeppoo1
127

Prueba esta solución:

from datetime import datetime

currentSecond= datetime.now().second
currentMinute = datetime.now().minute
currentHour = datetime.now().hour

currentDay = datetime.now().day
currentMonth = datetime.now().month
currentYear = datetime.now().year
Dave Gaurav
fuente
1
¡Funciona, gracias! ¿Hay una ventaja sobre .now()en lugar de .today()como se utiliza en otras respuestas? La now()función es más corta, se usa más comúnmente ... pero ¿hay alguna razón para usar una sobre la otra cuando todo lo que uno quiere saber es en qué año es?
Luc
1
@hashlash ¡Gracias! Para guardar a otros un clic: no, en realidad no
Luc
¿ from datetimeQué hace y por qué lo necesita?
Cadoiz
1
@Cadoiz: el paquete datetime tiene algunos submódulos: el datesubmódulo ( from datetime import date) que solo se ocupa de las fechas, el timesubmódulo que se ocupa de los tiempos y el datetimesubmódulo con nombre lamentable que hace ambas cosas. También hay timedeltay tzinfoallí. Uno podría simplemente import datetimeobtener el paquete completo con todos los submódulos, pero luego las llamadas a métodos se verían como datetime.datetime.now()o datetime.date.today(). Por lo general, es mejor importar solo los componentes que necesita por varias razones.
dannysauer
68

Utilizar:

from datetime import datetime

current_month = datetime.now().strftime('%m') // 02 //This is 0 padded
current_month_text = datetime.now().strftime('%h') // Feb
current_month_text = datetime.now().strftime('%B') // February

current_day = datetime.now().strftime('%d')   // 23 //This is also padded
current_day_text = datetime.now().strftime('%a')  // Fri
current_day_full_text = datetime.now().strftime('%A')  // Friday

current_weekday_day_of_today = datetime.now().strftime('%w') //5  Where 0 is Sunday and 6 is Saturday.

current_year_full = datetime.now().strftime('%Y')  // 2018
current_year_short = datetime.now().strftime('%y')  // 18 without century

current_second= datetime.now().strftime('%S') //53
current_minute = datetime.now().strftime('%M') //38
current_hour = datetime.now().strftime('%H') //16 like 4pm
current_hour = datetime.now().strftime('%I') // 04 pm

current_hour_am_pm = datetime.now().strftime('%p') // 4 pm

current_microseconds = datetime.now().strftime('%f') // 623596 Rarely we need.

current_timzone = datetime.now().strftime('%Z') // UTC, EST, CST etc. (empty string if the object is naive).

Referencia: 8.1.7. Comportamiento strftime () y strptime ()

Referencia: comportamiento de strftime () y strptime ()

Las cosas anteriores son útiles para cualquier análisis de fecha, no solo ahora o hoy. Puede ser útil para cualquier análisis de fecha.

e.g.
my_date = "23-02-2018 00:00:00"

datetime.strptime(str(my_date),'%d-%m-%Y %H:%M:%S').strftime('%Y-%m-%d %H:%M:%S+00:00')

datetime.strptime(str(my_date),'%d-%m-%Y %H:%M:%S').strftime('%m')

Y así...

Anup Yadav
fuente
6

Siempre puede utilizar un método de subcadena:

import datetime;

today = str(datetime.date.today());
curr_year = int(today[:4]);
curr_month = int(today[5:7]);

Esto le dará el mes y año actual en formato de número entero. Si desea que sean cadenas, simplemente debe eliminar la precedencia "int" al asignar valores a las variables curr_yeary curr_month.

Jaymeen_JK
fuente
5
Esto es malo. ¿Por qué es necesario lanzarlo y luego hacer una manipulación de cuerdas? datetime.datetime.now().monthes mejor.
Ahmed
5

Respuesta tardía, pero también puedes usar:

import time
ym = time.strftime("%Y-%m")
Pedro Lobito
fuente
1
Tarde, pero no incorrecto, e incluso claro que usar datetime. Gracias :).
ivanleoncz
4
>>> from datetime import date
>>> date.today().month
2
>>> date.today().year
2020
>>> date.today().day
13
Sanfirat
fuente