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