2013-03-27 7 views
8

मेरे पास युग के समय में नैनोसेकंड के साथ टाइमस्टैम्प है - उदा। 1 9-01-01-01 से 1360287003083988472 नैनोसेकंड।पायथन - मानव-पठनीय के लिए नैनोसेकंद के साथ युग का समय परिवर्तित करें?

पायथन डेटाटाइम ऑब्जेक्ट्स और रूपांतरण विधियां केवल मिलीसेकंद परिशुद्धता तक ही समर्थन करती हैं।

क्या इस युग के समय को मानव-पठनीय समय में बदलने का कोई आसान तरीका है?

चीयर्स, विक्टर

+1

@abarnert मुझे ऐसा नहीं लगता है। यह प्रश्न एक संख्या को मानव-पठनीय स्ट्रिंग में बदलने के साथ संबंधित है, जबकि वह स्ट्रिंग से 'डेटाटाइम' ऑब्जेक्ट में कनवर्ट करने का प्रयास कर रहा है। – ethguo

+0

@ ethg242: यह प्रश्न सभी जगहों पर है, लेकिन यह एक ही चीज़ पर आता है: 'डेटाटाइम' नैनोसेकंड को संभाल नहीं करता है, इसलिए आपको गणित/स्ट्रिंग स्वयं करना होगा। हो सकता है कि 'strptime' के बारे में एक प्रश्न और दूसरा' strftime 'के बारे में एक प्रश्न हो। – abarnert

+1

यह डुप्लिकेट – n611x007

उत्तर

13

पहले, दूसरे परिशुद्धता के साथ एक datetime वस्तु को परिवर्तित (फिदा, गोल नहीं):

>>> from datetime import datetime 
>>> dt = datetime.fromtimestamp(1360287003083988472 // 1000000000) 
>>> dt 
datetime.datetime(2013, 2, 7, 17, 30, 3) 

तो यह मानव पठनीय बनाने के लिए, पर strftime() विधि का उपयोग वस्तु वापस पहुंचने के लिए:

>>> s = dt.strftime('%Y-%m-%d %H:%M:%S') 
>>> s 
'2013-02-07 17:30:03' 

अंत में, nanosecond परिशुद्धता में वापस जोड़ें:

>>> s += '.' + str(int(1360287003083988472 % 1000000000)).zfill(9) 
>>> s 
'2013-02-07 17:30:03.083988472' 
3

वास्तव में, पायथन के datetime तरीकों संभाल माइक्रोसेकंड सटीक, नहीं मिलीसेकंड:

>>> nanos = 1360287003083988472 
>>> secs = nanos/1e9 
>>> dt = datetime.datetime.fromtimestamp(secs) 
>>> dt.strftime('%Y-%m-%dT%H:%M:%S.%f') 
'2013-02-07T17:30:03.083988' 

लेकिन आप वास्तव में नैनोसेकंड जरूरत है, अभी भी मदद नहीं करता है।

def format_my_nanos(nanos): 
    dt = datetime.datetime.fromtimestamp(nanos/1e9) 
    return '{}{:03.0f}'.format(dt.strftime('%Y-%m-%dT%H:%M:%S.%f'), nanos % 1e3) 

यह मैं देता है:: आपका सबसे अच्छा शर्त अपने स्वयं के आवरण लिखना है

'2013-02-07T17:30:03.083988472' 

बेशक आप एक ही बात कर सकते थे, भले ही अजगर पर सभी उप-दूसरे परिशुद्धता नहीं किया ...

def format_my_nanos(nanos): 
    dt = datetime.datetime.fromtimestamp(nanos/1e9) 
    return '{}.{:09.0f}'.format(dt.strftime('%Y-%m-%dT%H:%M:%S'), nanos % 1e9) 
संबंधित मुद्दे