2012-01-08 13 views
5

आप एक पाइथन datetime को मैटलैब datetnum में कैसे परिवर्तित करते हैं?पाइथन डेटाटाइम से मैटलैब डेटनम

+1

क्या आप वास्तव में किसी ऑब्जेक्ट में किसी ऑब्जेक्ट में ऑब्जेक्ट को किसी ऑब्जेक्ट में कनवर्ट करते हैं? यदि हां, तो आप किस इंटरफ़ेस का उपयोग कर रहे हैं (PyMat?) या क्या आपका मतलब है कि आप किसी विशेष प्रारूप में डेटाटाइम ऑब्जेक्ट को कैसे प्रिंट करते हैं? –

+0

@ डेविड रॉबिन्सन - नहीं, मेरा मतलब है 'डेटनम' का पाठपरक प्रतिनिधित्व जो मैटलैब जानता है कि कैसे पढ़ा जाए। '732399.65465' जैसी चीजें जहां बाईं ओर 1/1/1 (या 1/1/0 ?!) से ग्रेगोरियन दिन है और दाईं ओर – Jonathan

उत्तर

6

स्ट्रिंग के रूप datetime को क्रमानुसार करने के लिए, strftime अजगर पक्ष पर इस्तेमाल किया जा सकता:

import datetime 
d = datetime.datetime.now() 
print (d.strftime("%d-%b-%Y %H:%M:%S")) 

अनुसार MatLab docs को datenum जानता है कि यह कैसे पार्स करने के लिए।

4

पीछे क्या here किया गया था, मुझे मिल गया:

def datetime2matlabdn(dt): 
    ord = dt.toordinal() 
    mdn = dt + timedelta(days = 366) 
    frac = (dt-datetime(dt.year,dt.month,dt.day,0,0,0)).seconds/(24.0 * 60.0 * 60.0) 
    return mdn.toordinal() + frac 

timedelta.microseconds साथ भी काम करना चाहिए।

बेकार में:

एन = datetime.now()

datetime.datetime (2012, 2, 13, 6, 56, 2, 619000)

डेटाटाइम 2matlabdn (एन)

734912.28891203704

मैटलैब में:

>> datestr (734912,28891203704)

ans = 13-Feb-2012 06:56:02

+0

+1 का थोड़ा सा विषय है, लेकिन मेरे पास था मेरे पुराने जवाब में MATLAB 'डेटनम' और सी #' सिस्टम। डेटटाइम 'के बीच समान रूपांतरण करने के लिए। आंतरिक रूप से उपयोग की जाने वाली विभिन्न इकाइयों के अलावा, समय में संदर्भ बिंदु 366 दिनों तक भी बंद था: http://stackoverflow.com/a/7558811/97160 – Amro

+1

वास्तव में 'datestr (734912.28891203704, 'mmmm dd, yyyy hH: MM: SS। एफएफएफ एएम ') '13 फरवरी, 2012 6: 56: 02.000 एएम' उत्पन्न करता है, इसलिए यह मिलीसेकंड \ microseconds की जानकारी को बनाए रखता है – Jonathan

+0

@ जोनाथन: धन्यवाद। – bavaza

5

आधारित बावाजा के उत्तर पर - अब माइक्रोसेकंड सहित:

def datetime2matlabdn(dt): 
    mdn = dt + timedelta(days = 366) 
    frac_seconds = (dt-datetime.datetime(dt.year,dt.month,dt.day,0,0,0)).seconds/(24.0 * 60.0 * 60.0) 
    frac_microseconds = dt.microsecond/(24.0 * 60.0 * 60.0 * 1000000.0) 
    return mdn.toordinal() + frac_seconds + frac_microseconds 
संबंधित मुद्दे