het converteren van UNIX-tijdstempelstring naar leesbare datum

Ik heb een string die een UNIX-tijdstempel (d.w.z. “1284101485”) in Python vertegenwoordigen, en ik zou het graag willen converteren naar een leesbare datum. Wanneer ik time.strftimegebruik, ontvang ik een TypeError:

>>>import time
>>>print time.strftime("%B %d %Y", "1284101485")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument must be 9-item sequence, not str

Antwoord 1, Autoriteit 100%

Gebruik datetimeMODULE:

from datetime import datetime
ts = int("1284101485")
# if you encounter a "year is out of range" error the timestamp
# may be in milliseconds, try `ts /= 1000` in that case
print(datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))

Antwoord 2, Autoriteit 21%

>>> from datetime import datetime
>>> datetime.fromtimestamp(1172969203.1)
datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)

genomen van http://seehuhn.de/pages/pdate


Antwoord 3, Autoriteit 13%

Het meest gestemd antwoord suggereert met behulp van frontimestamp die fout vatbaar is, omdat het de lokale tijdzone gebruikt. Om problemen te voorkomen, is een betere aanpak om UTC te gebruiken:

datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')

waar Posix_Time de POSIX-tijdperk is die u

wilt converteren


Antwoord 4, Autoriteit 6%

>>> import time
>>> time.ctime(int("1284101485"))
'Fri Sep 10 16:51:25 2010'
>>> time.strftime("%D %H:%M", time.localtime(int("1284101485")))
'09/10/10 16:51'

Antwoord 5, Autoriteit 6%

Er zijn twee delen:

  1. Converteer de UNIX-tijdstempel (“seconden sinds epoch”) naar de lokale tijd
  2. Geef de lokale tijd in het gewenste formaat weer.

Een draagbare manier om de lokale tijd te krijgen die werkt, zelfs als de lokale tijdzone in het verleden een andere UTC-offset had en Python geen toegang heeft tot de TZ-database is om een ​​pytzTimeZone te gebruiken:

#!/usr/bin/env python
from datetime import datetime
import tzlocal  # $ pip install tzlocal
unix_timestamp = float("1284101485")
local_timezone = tzlocal.get_localzone() # get pytz timezone
local_time = datetime.fromtimestamp(unix_timestamp, local_timezone)

Om het weer te geven, kunt u elk tijdformaat gebruiken dat wordt ondersteund door uw systeem, b.v.:

print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))
print(local_time.strftime("%B %d %Y"))  # print date in your format

Als u geen lokale tijd nodig hebt, om in plaats daarvan een leesbare utc-tijd te krijgen:

utc_time = datetime.utcfromtimestamp(unix_timestamp)
print(utc_time.strftime("%Y-%m-%d %H:%M:%S.%f+00:00 (UTC)"))

Als u niet geeft om de tijdzoneproblemen die kunnen beïnvloeden welke datum wordt geretourneerd of als Python toegang heeft tot de TZ-database op uw systeem:

local_time = datetime.fromtimestamp(unix_timestamp)
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f"))

Op Python 3, kunt u een tijdzonebewuste datetime krijgen met alleen STDLIB (de UTC-offset kan verkeerd zijn als Python geen toegang heeft tot de TZ-database op uw systeem, b.v. op Windows):

#!/usr/bin/env python3
from datetime import datetime, timezone
utc_time = datetime.fromtimestamp(unix_timestamp, timezone.utc)
local_time = utc_time.astimezone()
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))

Functies van de timeModule zijn dunne wrappers rond de overeenkomstige C API en daarom kunnen ze minder draagbaar zijn dan de bijbehorende datetimeMETHODEN, anders zou u ze ook kunnen gebruiken: < / p>

#!/usr/bin/env python
import time
unix_timestamp  = int("1284101485")
utc_time = time.gmtime(unix_timestamp)
local_time = time.localtime(unix_timestamp)
print(time.strftime("%Y-%m-%d %H:%M:%S", local_time)) 
print(time.strftime("%Y-%m-%d %H:%M:%S+00:00 (UTC)", utc_time))  

Antwoord 6, Autoriteit 4%

in Python 3.6 +:

import datetime
timestamp = 1579117901
value = datetime.datetime.fromtimestamp(timestamp)
print(f"{value:%Y-%m-%d %H:%M:%S}")

Uitgang (in UTC)

2020-01-15 19:51:41

Uitleg

Bonus

Gebruik dit om de datum in een string op te slaan en vervolgens af te drukken:

my_date = f"{value:%Y-%m-%d %H:%M:%S}"
print(my_date)

Antwoord 7, autoriteit 3%

Voor een door mensen leesbare tijdstempel van een UNIX-tijdstempel heb ik dit eerder in scripts gebruikt:

import os, datetime
datetime.datetime.fromtimestamp(float(os.path.getmtime("FILE"))).strftime("%B %d, %Y")

Uitvoer:

’26 december 2012′


Antwoord 8, autoriteit 3%

Behalve het gebruik van het time/datetime-pakket, kunnen panda’sook worden gebruikt om hetzelfde probleem op te lossen. Hier is hoe we panda’skunnen gebruiken om tijdstempelom te zetten in leesbare datum:

Tijdstempels kunnen in twee formaten zijn:

  1. 13 cijfers (milliseconden) –
    Gebruik:

    . om millisecondennaar datum om te rekenen:

    import pandas
    result_ms=pandas.to_datetime('1493530261000',unit='ms')
    str(result_ms)
    Output: '2017-04-30 05:31:01'
    
  2. 10 cijfers (seconden) –
    Om secondennaar datum om te rekenen, gebruik je:

    import pandas
    result_s=pandas.to_datetime('1493530261',unit='s')
    str(result_s)
    Output: '2017-04-30 05:31:01'
    

Antwoord 9, autoriteit 2%

Je kunt de huidige tijd zo omrekenen

t=datetime.fromtimestamp(time.time())
t.strftime('%Y-%m-%d')
'2012-03-07'

Een datum in tekenreeks converteren naar verschillende formaten.

import datetime,time
def createDateObject(str_date,strFormat="%Y-%m-%d"):    
    timeStamp = time.mktime(time.strptime(str_date,strFormat))
    return datetime.datetime.fromtimestamp(timeStamp)
def FormatDate(objectDate,strFormat="%Y-%m-%d"):
    return objectDate.strftime(strFormat)
Usage
=====
o=createDateObject('2013-03-03')
print FormatDate(o,'%d-%m-%Y')
Output 03-03-2013

Antwoord 10, autoriteit 2%

timestamp ="124542124"
value = datetime.datetime.fromtimestamp(timestamp)
exct_time = value.strftime('%d %B %Y %H:%M:%S')

Krijg ook de leesbare datum van tijdstempel met tijd, ook kunt u het formaat van de datum wijzigen.


Antwoord 11

Houd er rekening mee dat utcfromtimestampkan leiden tot onverwachte resultaten omdat het een naïef datetime-object retourneert. Python behandelt naïeve datetime als lokale tijd– terwijl UNIX-tijd verwijst naar UTC.

Deze dubbelzinnigheid kan worden vermeden door het argument tzin te stellen in fromtimestamp:

from datetime import datetime, timezone
dtobj = datetime.fromtimestamp(1284101485, timezone.utc)
>>> print(repr(dtobj))
datetime.datetime(2010, 9, 10, 6, 51, 25, tzinfo=datetime.timezone.utc)

Je kunt nu formatteren naar string, b.v. een ISO8601-compatibel formaat:

>>> print(dtobj.isoformat(timespec='milliseconds').replace('+00:00', 'Z'))
2010-09-10T06:51:25.000Z

Antwoord 12

import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp

Antwoord 13

Een andere manier waarop dit kan worden gedaan met behulp van gmtime en formaatfunctie;

from time import gmtime
print('{}-{}-{} {}:{}:{}'.format(*gmtime(1538654264.703337)))

Uitvoer: 2018-10-4 11:57:44


Antwoord 14

Gebruik de volgende codes, ik hoop dat dit uw probleem zal oplossen.

import datetime as dt
print(dt.datetime.fromtimestamp(int("1284101485")).strftime('%Y-%m-%d %H:%M:%S'))

Antwoord 15

ik heb zojuist met succes gebruikt:

>>> type(tstamp)
pandas.tslib.Timestamp
>>> newDt = tstamp.date()
>>> type(newDt)
datetime.date

Antwoord 16

snelle en vuile oneliner:

'-'.join(str(x) for x in list(tuple(datetime.datetime.now().timetuple())[:6]))

‘2013-5-5-1-9-43’


Antwoord 17

Je kunt easy_dategebruiken om het gemakkelijk te maken:

import date_converter
my_date_string = date_converter.timestamp_to_string(1284101485, "%B %d, %Y")

Antwoord 18

Als u werkt met een dataframe en niet willen de series cannot be converted to class intFout. Gebruik de onderstaande code.

new_df= pd.to_datetime(df_new['time'], unit='s')

Other episodes