Main Content

Python での MATLAB datetime 型の使用

以下の例では、MATLAB® で MATLAB datetime 値と Python® datetime 値または NumPy datetime64 値間の変換を行う方法を示します。

Python 関数への MATLAB datetime スカラーの受け渡し

MATLAB datetime オブジェクトを Python 関数への引数として渡すと、インターフェイスで Python datetime オブジェクトに変換されます。たとえば、MATLAB datetime スカラーを作成します。この値はマイクロ秒を含めるのに十分な精度をもっています。

mwdt = datetime("2022-11-04 03:15:35.12345",...
                "Format","uuuu-MM-dd HH:mm:ss.SSSSS")
mwdt = 
  datetime
   2022-11-04 03:15:35.12345

次に、list コンストラクターなど、Python 関数への引数としてそれを渡します。インターフェイスにより、mwdt が Python datetime スカラーに変換されます。

pyListOfDatetime = py.list({mwdt})
pyListOfDatetime = 
  Python list with values:

    [datetime.datetime(2022, 11, 4, 3, 15, 35, 123450)]

Python 関数から返された Python datetime スカラーの処理

Python 関数から datetime オブジェクトが返されると、インターフェイスによって MATLAB datetime オブジェクトに変換されます。変換された datetime スカラーは常に既定の書式になります。書式を変更するには、その Format プロパティを設定します。この例では、マイクロ秒を表示するように書式を設定します。

mwdtConverted = pyListOfDatetime{1};
mwdtConverted.Format = "uuuu-MM-dd HH:mm:ss.SSSSS"
mwdtConverted = 
  datetime
   2022-11-04 03:15:35.12345

datetime 配列の受け渡し

MATLAB datetime 配列を Python datetime 値のリストとして保存するには、まず cell 配列に変換します。

mwdt = datetime(2022,11:12,4,3,15,35);
mwdt = num2cell(mwdt)
mwdt =
  1×2 cell array
    {[04-Nov-2022 03:15:35]}    {[04-Dec-2022 03:15:35]}

次に、cell 配列を Python 関数への引数として渡します。インターフェイスにより、cell 配列が Python datetime 値のリストに変換されます。

py.print(mwdt)
(datetime.datetime(2022, 11, 4, 3, 15, 35), datetime.datetime(2022, 12, 4, 3, 15, 35))

NumPy datetime64 配列の受け渡し

MATLAB datetime 配列と NumPy datetime64 配列間で変換できます。たとえば、MATLAB datetime 配列を作成します。

mwdt = datetime(2022,11:12,4,3,15,35)
mwdt = 
  1×2 datetime array
   04-Nov-2022 03:15:35   04-Dec-2022 03:15:35

NumPy がインストールされている場合、インターフェイスによって配列が NumPy datetime64 配列に変換されます。

py.print(mwdt)
[['2022-11-04T03:15:35.000000' '2022-12-04T03:15:35.000000']]
py.print(py.type(mwdt))
<class 'numpy.ndarray'>

NumPy datetime64 配列を MATLAB datetime 配列に変換するには、関数 datetime を使用します。

pyDatetimes = py.numpy.array(mwdt)
pyDatetimes = 
  Python ndarray with properties:

           T: [1×1 py.numpy.ndarray]
        base: [1×1 py.NoneType]
      ctypes: [1×1 py.numpy.core._internal._ctypes]
       dtype: [1×1 py.numpy.dtype[datetime64]]
       flags: [1×1 py.numpy.core.multiarray.flagsobj]
        flat: [1×1 py.numpy.flatiter]
        imag: [1×1 py.numpy.ndarray]
    itemsize: [1×1 py.int]
      nbytes: [1×1 py.int]
        ndim: [1×1 py.int]
        real: [1×1 py.numpy.ndarray]
       shape: [1×2 py.tuple]
        size: [1×1 py.int]
     strides: [1×2 py.tuple]
    [['2022-11-04T03:15:35.000000' '2022-12-04T03:15:35.000000']]
mwdtConverted = datetime(pyDatetimes)
mwdtConverted = 
  1×2 datetime array
   04-Nov-2022 03:15:35   04-Dec-2022 03:15:35

Python 関数から返された複数の Python datetime オブジェクトの処理

Python 関数は、複数の datetime オブジェクトを Python datetime オブジェクトのリストまたはタプルとして返すことがあります。MATLAB 関数 datetime を使用して、リストまたはタプルを MATLAB datetime 配列に変換します。リストまたはタプルには、Python datetime.datetime 型のみが含まれている必要があります。

配列のすべての要素には、スカラーの TimeZone 値が含まれている必要があります。MATLAB は、異なるタイム ゾーン値をもつリストまたはタプルの変換をサポートしていません。MATLAB は、Python datetime.datetime.fold 属性を無視します。

関数がリスト pyListOfDatetime を返すとします。この例のために、次のコードで pyListOfDatetime を作成します。

pdt1 = py.datetime.datetime.now()
pdt2 = py.datetime.datetime(year=int32(2022),month=int32(12),day=int32(28))
pyListOfDatetime = py.list({pdt1, pdt2})
pyListOfDatetime = 
  Python list with values:

    [datetime.datetime(2023, 5, 3, 13, 13, 16, 980815), datetime.datetime(2022, 12, 28, 0, 0)]

    Use string, double, datetime or cell function to convert to a MATLAB array.

2 つの datetime オブジェクト間の時間差を計算します。

mwdt = datetime(pyListOfDatetime);
caldiff(mwdt)
ans = 
   -4mo -6d -13h -13m -16.9808149999953s

参考

関連するトピック