python - यूनिक्स टाइमस्टैम्प स्ट्रिंग को पायथन में पठनीय दिनांक में परिवर्तित करना


मेरे पास एक स्ट्रिंग है जो पायथन में यूनिक्स टाइमस्टैम्प (यानी "1284101485") का प्रतिनिधित्व करता है, और मैं इसे एक पठनीय तिथि में परिवर्तित करना चाहता हूं। जब मैं time.strftime उपयोग करता 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

Answers



datetime मॉड्यूल का उपयोग करें:

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

इस कोड में datetime.datetime अजीब लग सकता है, लेकिन 1 दिन का datetime मॉड्यूल नाम है और दूसरा वर्ग नाम है। तो datetime.datetime.fromtimestamp() datetime मॉड्यूल से datetime वर्ग की fromtimestamp() विधि है।




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

Http://seehuhn.de/pages/pdate से लिया गया




सबसे ज्यादा वोट वाले उत्तर का मतलब है कि इटिटेमस्टैम्प का उपयोग करना जो कि त्रुटि प्रवण है क्योंकि यह स्थानीय समयक्षेत्र का उपयोग करता है। मुद्दों से बचने के लिए यूटीसी का उपयोग करना बेहतर तरीका है:

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

जहां posix_time पॉज़िक्स युग का समय है जिसे आप कनवर्ट करना चाहते हैं




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



एक UNIX टाइमस्टैम्प से मानव पठनीय टाइमस्टैम्प के लिए, मैंने इससे पहले स्क्रिप्ट में इसका उपयोग किया है:

import os, datetime

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

आउटपुट:

'दिसंबर 26, 2012'




आप इस तरह वर्तमान समय को बदल सकते हैं

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



दो भागों हैं:

  1. स्थानीय समय के लिए यूनिक्स टाइमस्टैम्प ("सेकंड्स युग युच") को कनवर्ट करें
  2. इच्छित प्रारूप में स्थानीय समय प्रदर्शित करें।

स्थानीय समय प्राप्त करने का एक पोर्टेबल तरीका यह भी काम करता है कि स्थानीय समय क्षेत्र में पिछले यूपी में एक अलग यूपीएस ऑफसेट और अजगर डेटाबेस का उपयोग करने के लिए 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_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"))

पायथन 3 पर, आप केवल stdlib (यूटीसी ऑफ़सेट का इस्तेमाल करते समय टाइमज़न-जागरूक डेटा-टाइम प्राप्त कर सकते हैं यदि अजगर को आपके सिस्टम पर टीज़ डाटाबेस पर एक्सेस नहीं है, जैसे विंडोज पर):

#!/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 मॉड्यूल से फ़ंक्शंस संबंधित सी एपीआई के आसपास पतली रैपर हैं और इसलिए वे संबंधित datetime तरीकों से कम पोर्टेबल हो सकते हैं अन्यथा आप उनका उपयोग भी कर सकते हैं:

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



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



त्वरित और गंदा एक लाइनर:

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

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




मैं सिर्फ सफलतापूर्वक इस्तेमाल किया:

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



आप इसे आसान बनाने के लिए easy_date का उपयोग कर सकते हैं:

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



क्या आपने डेट टाइम पैकेज को देखा? मेरा मानना ​​है कि इसमें यूनिक्सटैमस्टैम्प विधि है