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

标签 java matlab datetime

我使用的程序返回时间戳位于 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/

相关文章:

java - 持久对象异常 : detached entity passed to persist

matlab - Matlab 中 eval 函数内的控制流

一个包中的 Matlab gui 文件?

java - 将 CDT 时间转换为我的本地时间

java - servlet 中输入/输出流的性质

java - 更改 Android 应用程序中按钮的背景颜色

java - 如何在聚合中映射_id参数

matlab - 如何在 Octave 中打开 .mat 文件?

python - 使用 python 检查输入字符串是否包含日期(特别是 yy-mm-dd 格式)

python - 如何检查日期是否在特定范围内?