MATLAB - 日期和时间
MATLAB 中的现代日期和时间处理
Section titled “MATLAB 中的现代日期和时间处理”有效处理日期和时间信息对于数据分析、调度和日志记录至关重要。现代 MATLAB 提供了一个强大且直观的面向对象框架来完成这些任务,其核心是 datetime、duration 和 calendarDuration 数据类型。
最佳实践:避免使用 now、datenum 和 date 等传统函数。datetime 对象是所有新代码的标准,因为它更健壮、功能更丰富,并且与 MATLAB 的其他功能(如绘图和表格)无缝集成。
datetime 对象:时间的核心
Section titled “datetime 对象:时间的核心”datetime 对象表示一个特定的时间点(时间戳)。您可以通过几种方式创建它们:
% 获取当前日期和时间t_now = datetime('now');
% 从特定组件创建 datetimet_specific = datetime(2025, 10, 31, 18, 30, 0); % 年、月、日、时、分、秒
% 解析具有特定格式的日期字符串t_from_string = datetime('2024-07-04', 'InputFormat', 'yyyy-MM-dd');
% 创建一个 datetime 数组t_array = [datetime('today'); datetime('tomorrow')];datetime 的一个关键特性是其时区感知能力。这对于避免歧义至关重要。
% 使用本地时区创建 datetime 对象t_local = datetime('now', 'TimeZone', 'local');disp(t_local);
% 转换为另一个时区t_tokyo = t_local;t_tokyo.TimeZone = 'Asia/Tokyo';disp(t_tokyo);
% 直接创建带时区的对象t_ny = datetime(2024, 1, 1, 9, 0, 0, 'TimeZone', 'America/New_York');算术:duration 和 calendarDuration
Section titled “算术:duration 和 calendarDuration”MATLAB 提供了两种用于时间差的类型,理解它们的区别是关键:
duration:表示一个精确、固定的时间长度(例如 24 小时)。使用hours()、minutes()、seconds()。calendarDuration:表示基于日历的时间长度(例如 1 天,1 个月),其长度可能会有所不同(例如,由于夏令时或月份天数)。使用caldays()、calmonths()、calyears()。
示例:区别演示
Section titled “示例:区别演示”% 让我们使用美国夏令时开始的日期startTime = datetime(2024, 3, 10, 1, 30, 0, 'TimeZone', 'America/New_York');
% 添加精确的 24 小时(一个 duration 对象)endTime_duration = startTime + hours(24);disp(endTime_duration); % 输出: 11-Mar-2024 02:30:00 (时钟从凌晨 2 点跳到 3 点)
% 添加一个日历日(一个 calendarDuration 对象)endTime_calday = startTime + caldays(1);disp(endTime_calday); % 输出: 11-Mar-2024 01:30:00 (保留了当天的相同时间)常见算术操作
Section titled “常见算术操作”t1 = datetime('now');
% 添加 5 天 10 小时t2 = t1 + caldays(5) + hours(10);
% 创建一个未来 48 小时内每 6 小时的 datetime 序列t_sequence = t1 + hours(0:6:48);
% 计算两个 datetime 之间的时间差diff = datetime('now') - t1; % 结果是一个 duration 对象格式化与显示
Section titled “格式化与显示”您可以使用 Format 属性轻松控制 datetime 对象的显示方式。
t = datetime('now');
t.Format = 'dd-MMM-yyyy HH:mm:ss';disp(t); % 例如,30-Aug-2024 15:45:10
t.Format = 'eeee, MMMM d, yyyy';disp(t); % 例如,Friday, August 30, 2024
t.Format = 'uuuu-MM-dd''T''HH:mm:ssZ'; % ISO 8601 格式disp(t);实际应用:绘制时间序列数据
Section titled “实际应用:绘制时间序列数据”datetime 对象直接与绘图函数集成,自动创建有意义的轴标签。
% 1. 创建时间序列数据startTime = datetime('today');timePoints = startTime + hours(0:72); % 3 天的小时数据
% 2. 生成一些样本数据(例如,温度)tempData = 20 + 5 * sin(2*pi*(0:72)/24) + randn(1, 73);
% 3. 绘制数据figure;plot(timePoints, tempData, '-o');
title('3 天模拟温度');xlabel('日期和时间');ylabel('温度 (°C)');grid on;有用的实用函数
Section titled “有用的实用函数”dateshift:将 datetime 值移动到指定单元(例如,‘month’、‘year’、‘dayofweek’)的开始或结束。dateshift(t, 'start', 'month')查找 datetimet所在月份的第一天。calendar:在命令窗口中显示一个简单的基于文本的日历。calendar(2025, 12)显示 2025 年 12 月的日历。isbetween:检查 datetime 是否在指定时间间隔内。isbetween(t, t_start, t_end)。