Data e hora do ano e mês atuais em Python

99

Devo ter o ano e o mês atuais na data e hora.

Eu uso isso:

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

Existe talvez outra maneira?

user3778327
fonte
você quer dizer date.today().strftime("%Y-%m")?
00schneider

Respostas:

124

Usar:

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

Suponho que você queira o primeiro dia do mês.

llogiq
fonte
2
@ user3778327: a todayvariável já possui o ano e mês atuais.
jfs de
19
Para esta solução, certifique-se de usar em from datetime import datetimevez de simplesmenteimport datetime
jpobst
@jpobst Estou usando Python 3.8.1 & datetime-4.3 zope.interface-4.7.1 e o código acima (com import datetime ) funciona para mim. Se eu escrevo de datetime import datetime , ele me lança AttributeError: objeto de tipo 'datetime.datetime' não tem atributo 'datetime'
jeppoo1
138

Experimente esta solução:

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
Gaurav Dave
fonte
1
Funciona, obrigado! Existe uma vantagem sobre o .now()que .today()foi usado em outras respostas? A now()função é mais curta, é mais usada ... mas há alguma razão para usar uma em vez da outra quando tudo o que se quer saber é em que ano estamos?
Luc
1
@hashlash Obrigado! Para salvar os outros um clique: não, na verdade não
Luc
o que from datetimefaz e por que você precisa disso?
Cadoiz
1
@Cadoiz - O pacote datetime tem alguns submódulos - o datesubmódulo ( from datetime import date) que trata apenas de datas, o timesubmódulo que trata de horários e o datetimesubmódulo infelizmente nomeado que faz ambos. Há também timedeltae tzinfoali. Alguém poderia simplesmente import datetimeobter o pacote completo com todos os submódulos, mas as chamadas de método seriam semelhantes a datetime.datetime.now()ou datetime.date.today(). Normalmente, é melhor por vários motivos importar apenas os componentes de que você precisa.
dannysauer
69

Usar:

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).

Referência: 8.1.7. Comportamento strftime () e strptime ()

Referência: comportamento strftime () e strptime ()

As coisas acima são úteis para qualquer análise de data, não apenas agora ou hoje. Pode ser útil para qualquer análise de data.

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')

E assim por diante...

Anup Yadav
fonte
8

Você pode escrever a resposta aceita como uma linha usando date.replace:

datem = datetime.today().replace(day=1)
Físico Louco
fonte
7

Você sempre pode usar um método de substring:

import datetime;

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

Isso fornecerá o mês e o ano atuais em formato inteiro. Se você quiser que eles sejam strings, você simplesmente precisa remover a precedência "int" ao atribuir valores às variáveis curr_yeare curr_month.

Jaymeen_JK
fonte
5
Isto é mau. Por que preciso lançá-lo e fazer uma manipulação de cordas? datetime.datetime.now().monthé melhor.
Ahmed
5
>>> from datetime import date
>>> date.today().month
2
>>> date.today().year
2020
>>> date.today().day
13
sanfirat
fonte
5

Resposta tardia, mas você também pode usar:

import time
ym = time.strftime("%Y-%m")
Pedro Lobito
fonte
1
Atrasado, mas não errado e até mais claro do que usar datetime. Obrigado :).
ivanleoncz
0

A pergunta pede para usar datetime especificamente.

Esta é uma maneira que usa apenas data e hora:

year = datetime.now().year
month = datetime.now().month
Mattia Rasulo
fonte