Ophalen datetime van float in Python

Hoe krijgt men een datetime van een float in Python?

Voor e.g, ik heb een float zoals 43111.0 en ik wil voor de datetime voor dit.

  • Wat is 43111.0 hoort te zijn? Is dat een rare niet-standaard tijdstempel?
  • 43111 is de notatie voor de datum 11 januari 2018.
  • Heb je een specificatie of het iets voor?
  • meestal een float als een datum is dagen sinds het tijdperk. Alles links van de decimale is meestal seconden of milliseconden.
InformationsquelleAutor Pravin | 2011-07-15

 

4 Replies
  1. 26

    Ziet eruit als een Excel datetime formaat, genaamd seriële datum. Snelle en vuile manier om het te converteren:

    >>> import datetime
    >>> serial = 43111.0
    >>> seconds = (serial - 25569) * 86400.0
    >>> datetime.datetime.utcfromtimestamp(seconds)
    datetime.datetime(2018, 1, 11, 0, 0)
    • In mijn mening, dit is niet te vuil is, omdat Excel data echt gewoon een tijdstempel met een ander uitgangspunt. Twee dingen bewust te worden van: (1) fromtimestamp() omvat tijdzone-informatie, die kan of niet wenselijk is (ik denk meestal niet wenselijk is – let op de 2, 0 gebruikt aan het einde van het resultaat). Om zich te ontdoen van dit gebruik utcfromtimestamp() in plaats daarvan. (2) Deze methode kan geen ondersteuning voor data ouder dan 1970.
    • Bewerkt mijn antwoord op gebruik utcfromtimestamp() 🙂
  2. 9
    import datetime, time
    
    print datetime.datetime.fromtimestamp(time.time())
    print datetime.datetime.fromtimestamp(43111.0)
    • Bedankt voor uw antwoord, maar 43111.0 is niet de timestamp,het is de flaot getal notatie voor de datum 11 januari 2018.
  3. 8

    Probeer dit:

    from datetime import datetime
    
    datetime.fromtimestamp(*your_timestamp_here*).strftime('%Y-%m-%d')
    • Goede oplossing…….werkt prima
  4. 7

    Dus met een beetje wiskunde:

    Als 43111 is 11 januari 2018, dan 0 is op 30 December 1899.
    Python heeft datum en tijd.date.fromordinal()

    De terugkeer van de datum die overeenkomt met de proleptic Gregoriaanse ordinale,
    waar op 1 januari van het jaar 1 heeft rang 1. ValueError is verhoogd, tenzij 1
    <= ordinale <= date.max.toordinal(). Voor een date d,
    date.fromordinal(d.toordinal()) == d.

    Als u dat met een offset hebt:

    >>> dateoffset = 693594
    >>> datetime.date.fromordinal(dateoffset + 43111)
    datetime.date(2018, 1, 11)

    Hoop dat het helpt, zelfs als het niet werkt voor drijft.

    • Men moet omgaan fractionele deel afzonderlijk als rangtelwoorden worden gebruikt:(

Geef een reactie

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