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'

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top