从MATLAB到Java的datestr函数

时间:2018-07-13 15:23:57

标签: java matlab date datetime

我在Matlab中将其转换为日期字符串的文件中具有数字格式。该格式的结构例如为 732161.8561226851

当我在Matlab中执行datestr(732161.8561226851)时,我得到:

ans =

    '02-Aug-2004 20:32:49'

我希望获得与Java函数相同的输出。但是,我之前从未见过这种格式,并且不确定所采用的转换过程。

将其转换为日期字符串以便可以创建Java函数的过程是什么?

2 个答案:

答案 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.999Z2004-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