我想在MATLAB中知道Excel使用的日期模式。这是因为我从MATLAB读取了一个Excel文件,但根据用户机器的不同,日期表示为dd-mm-yyyy或mm-dd-yyyy。
澄清:对不起我的错误解释。这是我的情景。我有一个带有日期的Excel文件(和其他列,与此问题无关)。我有两台计算机,需要运行我的matlab应用程序。在第一个使用xlsread(在MATLAB中)时,由于我的计算机的区域配置,日期以dd-mm-yyyy格式显示。在第二个中,我在相同的MatLab版本中读取相同的文件,但是readed日期是mm-dd-yyyy格式(同样,由于计算机2的区域配置,这与计算机1不同)。 / p>
现在,当我尝试使用datenum,到日期转换时,我无法以正确的方式使用formatIn参数,因为如果我指定formatIn等于mm-dd-yyyy,这将在计算机1中正常工作,而不是计算机2,反之亦然。
所以,我认为我需要在MATLAB中识别Excel在计算机中使用的日期模式,以便为formatIn找到正确的输入参数。
答案 0 :(得分:1)
除非您非常了解自己的数据,否则无法做到。例如,如果您有01/07 / 20XX的年度读数,则无法知道是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。您可以在所有日期循环播放。
答案 1 :(得分:1)
如果你在谈论一个真正的.xls文件,我不知道是否有这样的东西有一些标志,但是一种启发式方法(可能是CSV格式的唯一方法)要查找大于12的数字。这将立即告诉您您的格式,因为这样的数字不能对应一个月。当然,对于一个小的数据集,这是不可靠的(严格来说,它永远不是完全可靠的,但对于非平凡的数据,它很可能工作)。
答案 2 :(得分: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输入。
答案 3 :(得分: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”,它将为您提供一个读取日期并将其转换为序列日期编号的方法列表。 (或者如果你想要的话)
编辑:
没关系,我误解了你的问题
答案 4 :(得分:0)
我遇到与来自澳大利亚和美国的计算机相同的问题。 这是一种方法,但它是一个干净的解决方案。 例如,在Excel中将日期转换为文本 国际格式&#y; 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');