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.strftime
gebruik, 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 datetime
MODULE:
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:
- Converteer de UNIX-tijdstempel (“seconden sinds epoch”) naar de lokale tijd
- 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 pytz
TimeZone 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 time
Module zijn dunne wrappers rond de overeenkomstige C API en daarom kunnen ze minder draagbaar zijn dan de bijbehorende datetime
METHODEN, 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
- Line # 1: import Datetime-bibliotheek .
- Regel #2: Unix-tijd die seconden is sinds 01-01-1970.
- Regel #3: Converteert dit naar een unix time object, controleer met:
type(value)
- Regel #4: Afdrukken in het dezelfde formaat als strp.
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:
-
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'
-
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 utcfromtimestamp
kan 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 tz
in 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 int
Fout. Gebruik de onderstaande code.
new_df= pd.to_datetime(df_new['time'], unit='s')