Aku punya string yang mewakili unix timestamp (yaitu "1284101485") di Python, dan I'd ingin mengubahnya untuk dibaca saat ini. Ketika saya menggunakan waktu.strftime
, saya mendapatkan 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
Gunakan 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'))
>>> from datetime import datetime
>>> datetime.fromtimestamp(1172969203.1)
datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)
Diambil dari http://seehuhn.de/pages/pdate
Yang paling sebagai jawaban menyarankan menggunakan fromtimestamp yang rawan kesalahan karena menggunakan zona waktu lokal. Untuk menghindari masalah pendekatan yang lebih baik adalah dengan menggunakan UTC:
datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')
Di mana posix_time adalah Posix zaman kali anda ingin mengkonversi
Ada dua bagian:
Portable cara untuk mendapatkan waktu setempat yang bekerja bahkan jika zona waktu lokal telah offset utc berbeda di masa lalu dan python tidak memiliki akses ke basis data adalah dengan menggunakan pytz
timezone:
#!/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)
Untuk menampilkannya, anda bisa menggunakan waktu format yang didukung oleh sistem anda, misalnya:
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
Jika anda tidak membutuhkan waktu setempat, untuk mendapatkan dibaca waktu UTC bukan:
utc_time = datetime.utcfromtimestamp(unix_timestamp)
print(utc_time.strftime("%Y-%m-%d %H:%M:%S.%f+00:00 (UTC)"))
Jika anda don't peduli tentang timezone isu-isu yang mungkin mempengaruhi apa yang tanggal kembali atau jika python memiliki akses ke basis data pada sistem anda:
local_time = datetime.fromtimestamp(unix_timestamp)
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f"))
Pada Python 3, anda bisa mendapatkan timezone-sadar datetime hanya menggunakan stdlib (UTC offset mungkin salah jika python tidak memiliki akses ke basis data pada sistem anda misalnya, di 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)"))
Fungsi dari waktu
modul yang tipis pembungkus di sekitar yang sesuai C API dan oleh karena itu mereka mungkin kurang portabel dari yang sesuai datetime
metode jika tidak, anda bisa menggunakannya juga:
#!/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))
Untuk dapat dibaca manusia timestamp dari UNIX timestamp, saya telah menggunakan ini dalam script sebelumnya:
import os, datetime
datetime.datetime.fromtimestamp(float(os.path.getmtime("FILE"))).strftime("%B %d, %Y")
Output:
'desember 26, 2012'
Anda dapat mengubah waktu saat ini seperti ini
t=datetime.fromtimestamp(time.time())
t.strftime('%Y-%m-%d')
'2012-03-07'
Untuk mengkonversi tanggal dalam string ke format yang berbeda.
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
Selain menggunakan waktu/datetime paket, panda juga dapat digunakan untuk memecahkan masalah yang sama.Di sini adalah bagaimana kita dapat menggunakan panda untuk mengkonversi timestamp untuk dibaca tanggal:
Cap waktu bisa dalam dua format:
impor panda result_ms=panda.to_datetime('1493530261000',unit='ms') str(result_ms)
Output: '2017-04-30 05:31:01' 2. 10 digit(detik) - Untuk mengkonversi detik untuk saat ini, gunakan:
impor panda result_s=panda.to_datetime('1493530261',unit='s') str(result_s)
Output: '2017-04-30 05:31:01'
timestamp ="124542124"
value = datetime.datetime.fromtimestamp(timestamp)
exct_time = value.strftime('%d %B %Y %H:%M:%S')
Dapatkan dibaca upload dari timestamp dengan waktu juga, anda juga dapat mengubah format tanggal.
Anda dapat menggunakan easy_date untuk memudahkan:
import date_converter
my_date_string = date_converter.timestamp_to_string(1284101485, "%B %d, %Y")