3 Pertanyaan: Data Python ke Matlab datenum

pertanyaan dibuat di Wed, Feb 22, 2012 12:00 AM

Bagaimana Anda mengonversi Python datetime ke Matlab datetnum?

    
5
  1. Apakah Anda benar-benar bermaksud mengonversi suatu objek dalam satu bahasa ke objek lain? Jika demikian, antarmuka apa yang Anda gunakan (PyMat?) Atau maksud Anda bagaimana Anda mencetak objek datetime dalam format tertentu?
    2012-01-08 09: 20: 00Z
  2. @ DavidRobinson - tidak, maksud saya adalah representasi tekstual datenum yang Matlab tahu cara membaca. hal-hal seperti 732399.65465 di mana di sebelah kiri adalah hari gregorian sejak 1/1/1 (atau 1/1/0 ?!) dan di sebelah kanan adalah sebagian kecil dari hari
    2012-01-08 14: 14: 47Z
3 Jawaban                              3                         

Untuk membuat serial waktu dat sebagai string, strftime dapat digunakan di sisi Python:

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

Menurut MatLab docs datenum tahu cara menguraikannya.

    
7
2012-01-08 09: 31: 39Z

Berdasarkan jawaban bavaza - sekarang termasuk mikrodetik:

 
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
    
6
2012-02-22 09: 00: 30Z

Membalikkan apa yang dilakukan di sini , Saya mendapat:

 
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

Harus bekerja dengan timedelta.microseconds juga.

Di IDLE:

  

n = datetime.now ()

     

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

     

datetime2matlabdn(n)

     

734912.28891203704

Di Matlab:

  

> > datestr (734912.28891203704)

     

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

    
5
2012-02-22 08: 50: 37Z
  1. +1 sedikit di luar topik, tetapi saya harus melakukan konversi yang serupa antara MATLAB datenum dan C # System.DateTime dalam jawaban lama saya. Selain unit yang berbeda yang digunakan secara internal, titik referensi dalam waktu juga dimatikan 366 hari: stackoverflow.com/a/7558811/97160
    2012-02-13 18: 03: 28Z
  2. sebenarnya datestr(734912.28891203704, 'mmmm dd, yyyy HH:MM:SS.FFF AM') menghasilkan February 13, 2012 6:56:02.000 AM sehingga tidak mempertahankan milidetik \informasi mikrodetik
    2012-02-22 08: 50: 11Z
  3. @ jonathan: Terima kasih.
    2012-02-25 10: 27: 41Z
sumber ditempatkan sini