Python datetime opmaak zonder zero-padding

Is er een indeling voor het afdrukken van Python datetimes dat zal geen gebruik maken van zero-padding op de data en tijden?

Indeling die ik nu gebruik:

mydatetime.strftime('%m/%d/%Y %I:%M%p')

Resultaat: 02/29/2012 05:03PM
Gewenst: 2/29/2012 5:03PM

Welk formaat zou vertegenwoordigen de maand als een ‘2’ in plaats van ’02’, en de tijd als ‘5:03PM’ in plaats van ’05:03PM’

InformationsquelleAutor Yarin | 2012-03-01

 

5 Replies
  1. 61

    De opmaakopties beschikbaar met datetime.strftime() zal alle nul-pad. Je kunt natuurlijk maak je eigen opmaak functie, maar de eenvoudigste oplossing in dit geval zou kunnen worden naar de post-proces het resultaat van datetime.strftime():

    s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")
    • Sven – Omdat ik wil kijken, zoals Facebook. Bedankt!
    • Dit is handig. Ik nodig voor het maken van Url ‘ s met non-padded dagen, en moest string 3 van deze samen: dt.strftime(“%B_”)+dt.strftime(“%d”).lstrip(“0″)+dt.strftim\ e”,_%Y”)
    • Zeer weinig mensen gebruik van zero-gevoerde uur in Noord-Amerika tijdens het schrijven van de tijd bij de hand.
    • Niet deze nog steeds nul pad de dag van de maand?
    • Dat is de reden waarom de oplossing is .lstrip("0") om zich te ontdoen van de nul.
    • Dit is het enige antwoord dat werkt zoals geadverteerd op Windows om een genaturaliseerde tijd output, maar ik zou willen dat er een betere manier.
    • Sommige instrumenten, zoals AWS CloudWatch Logs, die niet goed werken met niet-nul-gevoerde tijdstempels.
    • Gewoon het toevoegen van een opmerking dat de “%e” in plaats van “%d” voor de dag van de maand zal de ruimte startpunt van de single-digit dagen. Dat is niet in het algemeen nuttig, dus is het zinvoller om te doen .vervangen(” 0″,” “) benadering met “%d”.
    • Daarom wil ik verwijder pad nullen? Want dit is fout door een RFC 2822, bijvoorbeeld in de podcast feed.

  2. 108

    De andere om te voorkomen dat de “alles of niets” nul aspect boven is het plaatsen van een min voor het type veld:

    mydatetime.strftime('%-m/%d/%Y %-I:%M%p')

    Dan dit: ‘4/10/2015 03:00 UUR’

    Wordt: ‘4/10/2015 3:00 UUR’

    Kunt u desgewenst de plaats van een min voor de dag als u dat wenst.

    • Dit is eigenlijk het juiste antwoord, en het werkt in andere systemen (zoals matplotlib en panda ‘ s).
    • Geweldig antwoord, maar alleen voor Linux. Werkt niet op Windows. stackoverflow.com/questions/10807164/…
  3. 88

    De nieuwe snaar opmaak systeem biedt een alternatief voor strftime. Het is heel leesbaar — inderdaad, het zou beter zijn te strftime op dat account. En niet te vergeten het feit dat het geen nul-pad:

    >>> '{d.month}/{d.day}/{d.year}'.format(d=datetime.datetime.now())
    '3/1/2012'

    Omdat u waarschijnlijk wilt zero padding in de minuut veld, u zou dit kunnen doen:

    >>> '{d.month}/{d.day}/{d.year} {d.hour}:{d.minute:02}'.format(d=now)
    '3/1/2012 20:00'

    Als u wilt dat de “gewone” tijd in plaats van “militaire” tijd, kunt u nog steeds gebruik maken van de standaard strftime voorschrijvers als goed. Gunstig, voor onze doeleinden, strftime doet een code voor de 12-uurs tijd opgevuld met een lege in de plaats van een nul:

    '{d.month}/{d.day}/{d.year} {d:%l}:{d.minute:02}{d:%p}'.format(d=now)
    '4/4/2014  6:00PM'

    Dit wordt het een beetje minder leesbaar is, helaas. En zoals @mlissner punten uit, strftime zal mislukken op sommige (alle?) platforms voor dateert van voor 1900.

    • Koel-Hoe nieuw is deze opmaak systeem?- Ik heb het nooit gezien
    • Het is al sinds python 2.6. (Het is niet dat nieuw.)
    • Spel de maand, bijvoorbeeld, kunt u gebruik maken van de volgende: "{0.day} {0:%B %Y}".format(d) die zou geven u '2 August 2013' als de dag van deze reactie 🙂
    • Dit is interessant, maar niet echt antwoord OP, want hij wil AM/PM uur. Ik ben eigenlijk niet van plan om downvote, maar de geaccepteerde antwoord is eigenlijk als je probeert te krijgen “Amerikaanse” datum/tijd opmaak in python.
    • Merk op dat deze techniek maakt gebruik van strftime, die er niet in slagen op data voor 1900. Als u een oude data, u zult betreuren dit.
    • techniek” => “de laatste techniek” — de eerste twee niet gebruiken strftime.
    • Goed punt. Het is verrassend door, omdat strftime zelf is niet in zicht.
    • ja, ik kan zien hoe dat is misschien verrassend. De datetime object __format__ methode is in principe een alias van datum en tijd.strftime. Dat is dus twee lagen van impliciete gedrag; de impliciete oproep tot datetime.__format__ en het feit dat __format__ is een alias in dit geval. Dit kan een van die “praktisch beats zuiverheid” momenten.
    • fak! Ik besefte waar ik niet punt d aan een ander object, ik gaf het als een positionele arg.

  4. 38

    Geaccepteerd antwoord niet een goede oplossing (IMHO) De juiste gedocumenteerde methoden:

    In Linux “#” wordt vervangen door “-“:

    %d- %- H, %-I %-j, %-m, %-M, %S, %-U, %-w, %-W, %-y, %-Y

    In Windows “-” wordt vervangen door “#”:

    %#d %#H %#ik, %#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')

    Bron: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx

    Zoals aangegeven door Sagneta: De # hash-truc op Windows is alleen beschikbaar voor native python uitvoerbaar. dit zal niet werken voor cygwin op basis van python implementaties.

    • Dit is correct. Door er echter rekening mee dat de # hash-truc op Windows is alleen beschikbaar voor native python uitvoerbare bestanden. In andere woorden, dit zal niet werken voor cygwin op basis van python-implementaties.
    • Wow dit geweldig om te weten, maar ik ben geschokt van het gevolg. Ik ben het testen van datum opmaak terug van een Database en ik moet doorgeven in de verwachte opmaak voor elke test en dit voegt ton van complexiteit.
  5. 10

    Goede antwoord van Chris Freeman op Linux.

    Op windows, het is:

    mydate.strftime('%#m/%#d/%Y')

    Dacht dat dat zou kunnen helpen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *