0

我想在 MATLAB 中知道 Excel 使用的日期模式。这是因为我从 MATLAB 中读取了一个 Excel 文件,但是根据用户机器的定位,日期表示为 dd-mm-yyyy 或 mm-dd-yyyy。

澄清:对不起,我的错误解释。这是我的场景。我有一个带有日期的 Excel 文件(和其他列,与此问题无关)。我有两台计算机,需要运行我的 matlab 应用程序。在我使用 xlsread(在 MATLAB 中)的第一个中,由于我的计算机的区域配置,日期以 dd-mm-yyyy 格式显示。在第二个中,我在相同的 MatLab 版本中读取了相同的文件,但读取的日期是 mm-dd-yyyy 格式(再次,由于计算机 2 的区域配置,与计算机 1 不同)。

现在,当我尝试使用 datenum 进行日期转换时,我不能以正确的方式使用 formatIn 参数,因为如果我指定 formatIn 等于 mm-dd-yyyy 这将在计算机 1 中正常工作,而不是在计算机 2 中,反之亦然。

因此,我认为我需要在 MATLAB 中识别计算机中 Excel 使用的日期模式,以便为 formatIn 找到正确的输入参数。

4

5 回答 5

1

除非您非常了解您的数据,否则这是不可能的。例如,如果您有 20XX 年 1 月 7 日的年度读数,则无法知道是 1 月 7 日还是 7 月 1 日。

但是,您可以尝试以下方法:

MyString='01-23-2012';
FirstTwo=str2num(MyString(1:2));
if(FirstTwo>12)
    display('DD/MM');
else
    display('MM/DD');
end

如果日期的前两位数大于 12,那么您可能可以断定您有 DD/MM/YYYY。您可以在所有日期上循环。

于 2013-06-21T20:19:24.243 回答
1

如果您谈论的是一个实际的 .xls 文件,我不知道是否有这种事情的标志,但一种启发式方法(可能是唯一使用 CSV 格式的方法)是看对于大于 12 的数字。这将立即告诉您您拥有哪种格式,因为这样的数字不能对应于一个月。当然,对于小数据集,这是不可靠的(严格来说,它永远不会完全可靠,但对于非平凡的数据,它很可能会起作用)。

于 2013-06-21T20:20:57.523 回答
1

你也许可以用 Java 做一些事情来告诉你日期格式。

>> import java.text.DateFormat;
>> import java.text.SimpleDateFormat;
>> df = DateFormat.getDateInstance(DateFormat.SHORT);
>> dateFormat = char(df.toPattern())
dateFormat =
dd/MM/yy

我认为 xlsread 使用这种格式,尽管您需要在两台机器上测试它。请注意,getDateInstance 还有一个 Locale 输入可能有用。

于 2013-06-22T00:11:24.333 回答
0

我对你的问题有点困惑,MATLAB 和 Excel 都能够轻松支持 mm-dd 和 dd-mm。在 excel 中,默认值取决于您的居住地。在美国,它将是 mm-dd,而在欧洲(可能还有世界其他大部分地区),它将是 dd-mm。

在 MATLAB 中,我不确定它是否像 Excel 一样取决于位置,作为美国人,标准当然是 mm-dd,但您可以完全自定义 matlab 解析日期字符串的方式!

查看http://www.mathworks.com/help/matlab/ref/datenum.html然后转到输入参数,然后是“formatIn”,它将为您提供读取日期并将其转换为的方法列表序列日期编号。(或者你想要的矢量)

编辑:

没关系,我误解了你的问题

于 2013-06-21T20:20:46.717 回答
0

我在澳大利亚和美国的计算机上遇到了同样的问题。这是一种解决方法,但它是一个干净的解决方案。在 excel 中将日期转换为文本,例如国际格式 'yyyymmdd'

 % B1=TEXT(A1,"yyyymmdd") % This is in excel
    % in matlab read excel file 'dates.xlsx'
    [data, dates_header] =xlsread('dates.xlsx');
    % use datevec to read-in data
    t = datevec(dates_header(:,2),'yyyymmdd');
于 2016-10-21T05:55:11.297 回答