Use MATLAB Datetime Types with Python
These examples show how MATLAB® converts between MATLAB
datetime values and Python®
datetime or NumPy datetime64 values.
Pass MATLAB datetime Scalar to Python Function
When you pass a MATLAB
datetime object as an argument to a Python function, the interface converts it to a Python
datetime object. For example, create a MATLAB
datetime scalar. This value is precise enough to include
microseconds.
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
Then pass it as an argument to a Python function, such as the list constructor. The interface
converts mwdt to a Python
datetime scalar.
pyListOfDatetime = py.list({mwdt})
pyListOfDatetime =
Python list with values:
[datetime.datetime(2022, 11, 4, 3, 15, 35, 123450)]
Handle Python datetime Scalar Returned from Python Function
When a Python function returns a datetime object, the interface converts
it to a MATLAB
datetime object. The converted datetime scalar always
has the default format. To change its format, set its Format property. In
this example, set the format to display microseconds.
mwdtConverted = pyListOfDatetime{1};
mwdtConverted.Format = "uuuu-MM-dd HH:mm:ss.SSSSS"
mwdtConverted = datetime 2022-11-04 03:15:35.12345
Pass datetime Arrays
To store a MATLAB
datetime array as a list of Python
datetime values, first convert it to a cell array.
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]}
Then pass the cell array as an argument to a Python function. The interface converts the cell array to a list of Python
datetime values.
py.print(mwdt)
(datetime.datetime(2022, 11, 4, 3, 15, 35), datetime.datetime(2022, 12, 4, 3, 15, 35))
Pass NumPy datetime64 Arrays
You can convert between MATLAB
datetime arrays and NumPy datetime64 arrays. For
example, create a MATLAB
datetime array.
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
If you have NumPy installed, then the interface converts the array to a NumPy
datetime64 array.
py.print(mwdt)
[['2022-11-04T03:15:35.000000' '2022-12-04T03:15:35.000000']]
py.print(py.type(mwdt))
<class 'numpy.ndarray'>
To convert a NumPy datetime64 array to a MATLAB
datetime array, use the datetime function.
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
When the MATLAB engine converts a zoned MATLAB
datetime array to a NumPy datetime64 array, it first
converts the time zone to UTC and then removes the time zone before constructing the NumPy
datetime64 array. Also, on machines that do not have a system Internet
Assigned Numbers Authority time zone database, such as Windows® computers, you can install the Python tzdata module from the Python Package Index.
Handle Multiple Python datetime Objects Returned from Python Function
A Python function might return multiple datetime objects as a list
or a tuple of Python
datetime objects. Use the MATLAB
datetime function to convert the list or tuple to a MATLAB
datetime array. The list or tuple must contain Python
datetime.datetime types only.
All elements of the array must contain the same time zone value. MATLAB ignores the Python
datetime.datetime.fold attribute. Suppose that a function returns a list,
pyListOfDatetime. For the purpose of this example, create
pyListOfDatetime with this code:
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.
Calculate the time difference between the two datetime objects:
mwdt = datetime(pyListOfDatetime); caldiff(mwdt)
ans = -4mo -6d -13h -13m -16.9808149999953s