matlab - 使用不同时区的当地时间 - Matlab 表
问题描述
我有一个记录在不同时区的时间序列数据(附上示例图)。请注意,时间信息采用 UTC。对于大型数据集,我需要将它们自动转换为当地时间 (AM/PM)。我附上了样本数据,非常感谢这方面的任何帮助。
解决方案
您可以使用TimeZone
MATLABdatetime
数据类型的属性为您进行转换。唯一的麻烦是让 MATLAB “忘记”时区信息,这样您就可以拥有一个包含所需日期时间的简单数据集。我通过datenum
以下方式实现了这一点:
请注意,如果您想保留时区信息,则可以通过不执行额外的转换步骤来简化此操作。
另请注意,您将用或类似的方式替换顶部的虚拟数据readtable
以引入数据,但我假设源数据完全是字符单元格,即您可能需要小心readtable
“巧妙地”检测日期时间列,这可能意味着您必须在循环中以不同的方式处理它或提供额外的参数readtable
来防止这种自动化。
data = cell2table( { ...
'4/02/2021 16:25', 'Pacific/Auckland'
'4/02/2021 16:05', 'Pacific/Auckland'
'5/02/2021 9:17', 'America/Chicago'
'4/02/2021 22:27', 'Asia/Singapore'
}, 'VariableNames', {'timeStrUtc','timezone'} );
data.timeUtc(:) = NaT;
data.timeLocal(:) = NaT;
for ii = 1:height(data)
% Convert input string to UTC-timezoned datetime
zonedDateUtc = datetime( data.timeStrUtc{ii}, ...
'InputFormat', 'dd/MM/yyyy HH:mm', ...
'TimeZone', 'UTC' );
% Convert to a local datetime
zonedDateLocal = datetime( zonedDateUtc, 'TimeZone', data.timezone{ii} );
% Get rid of MATLAB's associated timezones by converting to datenum
zonedDateUtc = datenum( zonedDateUtc );
zonedDateLocal = datenum( zonedDateLocal );
% Assign output to table, without timezones so all utc/local
data.timeUtc(ii) = datetime( zonedDateUtc, 'ConvertFrom', 'datenum' );
data.timeLocal(ii) = datetime( zonedDateLocal, 'ConvertFrom', 'datenum' );
end
% Format table columns
data.timeUtc.Format = 'd/M/yyyy h:mm a';
data.timeLocal.Format = 'd/M/yyyy h:mm a';
推荐阅读
- c++ - OpenGL 立体视图——如何使用 GLM 数学库进行水平偏移
- sql - 基于时间的分页
- sql - 基础函数更改后重新计算 Postgres 生成的列中的值
- javascript - ReferenceError:在使用 React Aria 覆盖时,文档未在 Next.js 中定义
- r - R函数过滤掉每日数据
- python - CNN for 5 Classifications: ValueError: Shapes (None, 228, 228, 1) and (None, 1) is incompatible
- matlab - Octave:如何索引数组的单个元素?
- c# - 带有输出参数的 Dynamics CRM 工作流继承
- firebase - 云构建:即使我授予了 blob 的签名权限,也没有权限
- html - 使div的宽度没有到达页面的末尾