我在Matlab中将其转换为日期字符串的文件中具有数字格式。该格式的结构例如为 732161.8561226851 。
当我在Matlab中执行datestr(732161.8561226851)
时,我得到:
ans =
'02-Aug-2004 20:32:49'
我希望获得与Java函数相同的输出。但是,我之前从未见过这种格式,并且不确定所采用的转换过程。
将其转换为日期字符串以便可以创建Java函数的过程是什么?
答案 0 :(得分:2)
// Matlab epoch is January 0, 0000, so subtract 1 day from January 1:
Instant matlabEpoch = Instant.parse("0000-01-01T00:00:00Z").minus(1, ChronoUnit.DAYS);
Instant inst = matlabEpoch.plusMillis(
Math.round(732161.8561226851 * TimeUnit.DAYS.toMillis(1)));
System.out.println(inst);
此打印:
2004-08-02T20:32:49Z
我相信@Riley Jacob’s answer是正确的,并且看到它使用了已经过时的Date
类。因此,我想给出相同答案的现代版本。除了避免使用老式的类之外,它还具有将大部分计算留给库方法的优点,从而使代码更清晰。
我发现值得注意的是,我们以毫秒精度达到了与Matlab相同的结果。如果结果相差一毫秒,它将被打印为2004-08-02T20:32:48.999Z
或2004-08-02T20:32:49.001Z
。
链接: Oracle tutorial: Date Time解释了如何使用java.time
。
答案 1 :(得分:1)
格式为MATLAB的DateNumber
:自0000年1月0日以来经过的天数。您可以使用Java的toUTCString
进行一些修改:
var d = new Date(dateMATLAB*86400000-62167305600000);
var n = d.toUTCString();
dateMATLAB
是MATLAB的日期输出。值62167305600000
是第0年到1970年之间经过的毫秒数。使用您的示例,
var d = new Date(732161.8561226851*86400000-62167305600000);
var n = d.toUTCString();
将输出
Mon, 02 Aug 2004 20:32:48 GMT