python - تحويل سلسلة الطابع الزمني unix إلى تاريخ قابل للقراءة




datetime unix-timestamp (10)

لدي سلسلة تمثل طابعًا زمنيًا لمفرد يونكس (أي "1284101485") في Python ، وأود تحويله إلى تاريخ قابل للقراءة. عندما أستخدم time.strftime ، أحصل على 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

استخدم وحدة datetime :

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

في هذا الكود datetime.datetime يمكن أن تبدو غريبة ، ولكن datetime الأول هو اسم الوحدة النمطية والثاني هو اسم الفئة. لذا datetime.datetime.fromtimestamp() هي طريقة fromtimestamp() لفئة datetime من وحدة datetime .


بالنسبة إلى الطابع الزمني القابل للقراءة من قبل طابع UNIX ، استخدمت هذا في نصوص برمجية من قبل:

import os, datetime

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

انتاج:

"26 ديسمبر 2012"


بطانة سريعة وقذرة:

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

"2013-5-5-1-9-43"


تقترح الإجابة الأكثر تصويتًا استخدام fromtimestamp وهو عرضة للخطأ نظرًا لأنه يستخدم المنطقة الزمنية المحلية. لتجنب المشكلات ، يكون النهج الأفضل هو استخدام التوقيت العالمي المنسق (UTC):

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

عندما يكون posix_time هو وقت الحقبة Posix الذي تريد تحويله


هل نظرت إلى مجموعة datetime؟ أعتقد أنه يحتوي على طريقة fromUnixTimestamp.


هناك جزئين:

  1. قم بتحويل الطابع الزمني unix ("الثواني منذ العصر") إلى التوقيت المحلي
  2. عرض التوقيت المحلي بالتنسيق المطلوب.

طريقة محمولة للحصول على الوقت المحلي الذي يعمل حتى لو كانت المنطقة الزمنية المحلية لديها إزاحة مختلفة عن utc في الماضي و python لا يوجد لديه الوصول إلى قاعدة البيانات tz هو استخدام المنطقة الزمنية pytz :

#!/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)

لعرضه ، يمكنك استخدام أي تنسيق زمني يدعمه نظامك على سبيل المثال:

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

إذا لم تكن بحاجة إلى التوقيت المحلي ، فيمكنك الحصول على وقت UTC قابل للقراءة بدلاً من ذلك:

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

إذا كنت لا تهتم بقضايا المنطقة الزمنية التي قد تؤثر على التاريخ الذي تم إرجاعه أو إذا كان للبيثون حق الوصول إلى قاعدة بيانات tz على نظامك:

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

في Python 3 ، يمكن أن تحصل على تاريخ زمني مدرك للوقت باستخدام stdlib فقط (قد يكون إزاحة UTC خاطئًا إذا كان python لا يستطيع الوصول إلى قاعدة بيانات tz على نظامك على سبيل المثال ، على 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)"))

تعتبر الدوال من الوحدة time عبارة عن مغلفات رقيقة حول واجهة برمجة التطبيقات C المقابلة ، وبالتالي قد تكون أقل قابلية للحمل مقارنة بالطرق time وإلا يمكنك استخدامها أيضًا:

#!/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))  

يمكنك استخدام easy_date لتسهيل الأمر:

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

يمكنك تحويل الوقت الحالي مثل هذا

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

لتحويل تاريخ في السلسلة إلى تنسيقات مختلفة.

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

>>> 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'

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




strftime