为什么 Xlsread 读取(日期时间)为字符串

Why Xlsread reading (date time) as string

我正在尝试阅读 Excel sheet。 在同一台计算机上,我有不同的结果。我应该怎么做才能将日期时间读取为日期而不是字符串?

我知道以后可以更改它,但我需要为 Octave 和 Matlab 使用相同的代码。

Matlab:

[data,header, raw]=xlsread('Mappe1.xlsx');

data =

         0   -0.1843   -0.1445
         0   -0.1845   -0.1455
         0   -0.1833   -0.1461
         0   -0.1819   -0.1466

header = 

    'Stamp'                  'R1.1'    'R2.1'    'R2.2'
    '24.11.2017 09:41:25'    ''        ''        ''    
    '24.11.2017 05:41:23'    ''        ''        ''    
    '24.11.2017 01:41:21'    ''        ''        ''    
    '23.11.2017 21:41:19'    ''        ''        ''    


Octave:
data =

  4.3063e+004  0.0000e+000  -1.8434e-001  -1.4451e-001
  4.3063e+004  0.0000e+000  -1.8445e-001  -1.4551e-001
  4.3063e+004  0.0000e+000  -1.8328e-001  -1.4611e-001
  4.3063e+004  0.0000e+000  -1.8186e-001  -1.4661e-001
  4.3063e+004  0.0000e+000  -1.8071e-001  -1.4493e-001
  4.3063e+004  0.0000e+000  -1.8192e-001  -1.4123e-001
  4.3062e+004  0.0000e+000  -1.8348e-001  -1.4165e-001
  4.3062e+004  0.0000e+000  -1.8358e-001  -1.4219e-001
  4.3062e+004  0.0000e+000  -1.8342e-001  -1.4284e-001

header =
{
  [1,1] = Stamp
  [1,2] = R1.1
  [1,3] = R2.1
  [1,4] = R2.2
}

确保您的 Excel 数据在 Excel 中格式化为日期,然后使用 "basic" 模式从 MATLAB 加载:

[data,header,raw]=xlsread('Mappe1.xlsx','','','basic');

首先,您上面显示的数据将您的日期格式设置为 24.11.2017 09:41:25。点分隔符在我看来并不标准,这让我想知道它们是如何存储在 Excel 中的。我会使用像 2017-11-24 09:41:25 这样的标准格式,并确保 Excel 将它们识别为 dates/times。 (有关 MATLAB 喜欢的格式,请参阅 here)。

通过执行上述操作,我能够在 MATLAB 中读取与您请求的数值看起来相同的数值。使用基本模式将读取日期作为 Excel 序列号(不是 MATLAB datenums),如记录 here.

如果您不使用 "basic" 模式,则 MATLAB 行为取决于您计算机上安装的 Excel 版本(我们不知道)。我不知道 Octave 在这种情况下是如何工作的。

最后,在简单的情况下,编写同时适用于 MATLAB 和 Octave 的代码可能是不可能的(甚至根本不可能)。你必须准备好克服重重困难才能实现这一目标。此外,我不声称这在 Octave 中也能正常工作,因为我没有要测试的 Octave!