gpt4 book ai didi

java - 如何将 Java Date 对象转换为带时区的 Matlab 日期时间数组

转载 作者:行者123 更新时间:2023-11-30 05:17:47 25 4
gpt4 key购买 nike

我使用的程序返回时间戳位于 Java date objects 的数据。我需要读取 Matlab 中的时间,并能够使用 Matlab 中生成的可能指定时区的日期时间数组进行日期时间算术。如何将 Java Date 对象转换为带时区的 Matlab 日期时间数组?

我一直在尝试使用Java time serial 。但我无法在 Matlab 中获得正确的时区。

例如,现在是美国东部时间下午 2:30 左右,now Matlab 中的函数按预期工作。

>> datetime(now,'ConvertFrom','datenum','TimeZone','America/New_York')
ans =
datetime
06-Feb-2020 14:37:40

但是,从 Java 时间序列开始,即自 1970/1/1 GMT 以来的时间(以毫秒为单位),同一行不起作用。美国东部时间上午 10:40 的日期对象返回以下内容。

>> class(JavaDateObj)
ans =
'java.util.Date'
>> format long
>> JavaDateObj.getTime
ans =
1.581003592273000e+12
% to run this snippet, ignore the above; set JavaDateSerial = 1.581003592273000e+12; and replace JavaDateObj.getTime below with JavaDateSerial


%%%% expecting time in EST below and get time in GMT instead

>> datetime(datenum([1970 1 1 0 0 JavaDateObj.getTime/1000]),'ConvertFrom','datenum','TimeZone','America/New_York')
ans =
datetime
06-Feb-2020 15:39:52

%%%% expecting now to be later than earlier but get the wrong result

>> temp=ans;
>> datetime(now,'ConvertFrom','datenum','TimeZone','America/New_York') > temp
ans =
logical
0

如果使用日期序列是进行上述转换的方法,那么如何将 Java 时间序列中的时区合并到 Matlab 中?

如果有其他方法将Java日期对象转换为带时区的Matlab日期时间数组,请告知。

最佳答案

java.util.Date 的 getTime 方法 returns the milliseconds in GMT ,但 datenum 构造函数需要本地时间的毫秒数。您需要先转换为 GMT 时间,然后第二步转换时区。

dt = datetime(datenum([1970 1 1 0 0 JavaDateObj.getTime/1000]),'ConvertFrom','datenum');
dt.TimeZone = 'GMT';
dt.TimeZone = 'America/New_York';

如果您在原始构造函数调用中指定 TimeZone,则您是在告诉 Matlab 您发送的 datenum 值是已位于该时区的本地时间。

您还可以使用“posixtime”转换格式来简化构造函数调用,该格式更接近于 java.util.Date.getTime() 返回的内容。

dt = datetime(datenum(javaDateObj.getTime/1000),'ConvertFrom','posixtime')

关于java - 如何将 Java Date 对象转换为带时区的 Matlab 日期时间数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60102576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com