Formatação de data e hora em Python sem preenchimento de zero
-
15-11-2019 - |
Pergunta
Existe um formato para imprimir datas em Python que não use preenchimento de zeros em datas e horas?
Formato que estou usando agora:
mydatetime.strftime('%m/%d/%Y %I:%M%p')
Resultado: 29/02/2012 17h03
Desejado: 29/02/2012 17h03
Qual formato representaria o mês como '2' em vez de '02' e a hora como '17h03' em vez de '17h03'
Solução
As opções de formatação disponíveis com datetime.strftime()
todos serão zerados.É claro que você poderia implementar sua própria função de formatação, mas a solução mais fácil neste caso seria pós-processar o resultado de datetime.strftime()
:
s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")
Outras dicas
A outra alternativa para evitar o aspecto do zero inicial "tudo ou nenhum" acima é colocar um sinal de menos na frente do tipo de campo:
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
Então isso:'10/04/2015 03:00'
Torna-se:'10/04/2015 3h00'
Opcionalmente, você pode colocar um sinal de menos na frente do dia, se desejar.
O novo sistema de formatação de strings oferece uma alternativa para strftime
.É bastante legível - na verdade, pode ser preferível strftime
naquela conta.Sem mencionar o fato de que não zera:
>>> '{d.month}/{d.day}/{d.year}'.format(d=datetime.datetime.now())
'3/1/2012'
Como você provavelmente deseja preenchimento com zeros no campo dos minutos, você poderia fazer o seguinte:
>>> '{d.month}/{d.day}/{d.year} {d.hour}:{d.minute:02}'.format(d=now)
'3/1/2012 20:00'
Se você quiser o horário "normal" em vez do horário "militar", ainda poderá usar o horário padrão strftime
especificadores também.Convenientemente, para nossos propósitos, strftime
faz forneça um código para o horário de 12 horas preenchido com um espaço em branco em vez de um zero à esquerda:
'{d.month}/{d.day}/{d.year} {d:%l}:{d.minute:02}{d:%p}'.format(d=now)
'4/4/2014 6:00PM'
Isso se torna um pouco menos legível, infelizmente.E como @mlissner aponta, strftime
falhará em algumas (todas?) plataformas em datas anteriores a 1900.
A resposta aceita não é uma solução adequada (IMHO) Os métodos documentados adequados:
No Linux "#" é substituído por "-":
%-d, %-H, %-I, %-j, %-m, %-M, %-S, %-U, %-w, %-W, %-y, %-Y
No Windows, "-" é substituído por "#":
%#d, %#H, %#I, %#j, %#m, %#M, %#S, %#U, %#w, %#W, %#y, %#Y
#Linux
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
# Windows
mydatetime.strftime('%#m/%d/%Y %#I:%M%p')
Fonte: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
Como afirma Sagneta:O truque # hash no Windows está disponível apenas para executável python nativo.isso não funcionará para implementações python baseadas em cygwin.
Boa resposta de Chris Freeman no Linux.
No Windows, é:
mydate.strftime('%#m/%#d/%Y')
Achei que isso poderia ajudar.