Mengkonversi unix timestamp string untuk dibaca upload

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
Mengomentari pertanyaan (1)

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'))
Komentar (11)
>>> from datetime import datetime
>>> datetime.fromtimestamp(1172969203.1)
datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)

Diambil dari http://seehuhn.de/pages/pdate

Komentar (0)

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

Komentar (2)
>>> 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'
Komentar (1)

Ada dua bagian:

  1. Mengkonversi unix timestamp ("detik sejak epoch") waktu setempat
  2. Menampilkan waktu lokal dalam format yang diinginkan.

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))  
Komentar (1)

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'

Komentar (0)

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
Komentar (0)

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:

  1. 13 digit(milidetik) - Untuk mengkonversi milidetik untuk saat ini, gunakan:

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'

Komentar (0)
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.

Komentar (3)

Cara lain yang dapat dilakukan dengan menggunakan gmtime dan format fungsi;

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

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

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

aku hanya berhasil digunakan:

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

Anda dapat menggunakan easy_date untuk memudahkan:

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

cepat dan kotor one liner:

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

'2013-5-5-1-9-43'

Komentar (4)