StrToDateDef无法正常工作

时间:2014-01-30 07:17:55

标签: delphi delphi-xe

我想将系统日期时间转换为特定格式。我的系统格式是dd / mm / yy我想转换为mm / dd / yyyy,所以我使用的是StrToDateDef。我只需要使用StrToDateDef因为日期是字符串,如果有一个字符串而不是日期我将使用默认日期。我的代码在

之下
  str := '30/01/14';

  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FmtStngs);
  FmtStngs.DateSeparator := '/';
  FmtStngs.ShortDateFormat := 'mm/dd/yyyy';
  FmtStngs.TimeSeparator := ':';
  FmtStngs.LongTimeFormat := 'hh:nn';

  date := StrToDateDef(str,01/28/2013,FmtStngs);

我期待这个日期为'01 / 30/2014',但它将以'30 / 01/14'的形式出现。我做错了什么?

1 个答案:

答案 0 :(得分:7)

此代码中存在多个错误:

首先,传递给TFormatSettings例程的StrToDateDef是您传递的字符串的格式设置(而不是出现的日期时间变量,稍后会详细介绍)。

当您传递'30/01/14'时,ShortDateFormat应该是'dd/mm/yyyy'而不是'mm/dd/yyyy'

然后你传递的默认值等于在12.12.1899午夜之后的1ms(因为你实际上传递1除以28除以2014)。使用EncodeDate(2013, 1, 28)中的DateUtils.pas

然后你说

  

我期待这个日期为'01 / 30/2014',但它将以'30 / 01/14'的形式出现。

您正在查看TDateTime变量,它将根据调试器的Windows系统本地设置进行格式化。而已。你没有一个字符串,而是一个浮点值(这就是TDateTime所代表的),它以字符串形式呈现给你,使其可读。

此外,我认为结果应该是传递的默认日期,因为传递的ShortDateFormat与您传递的字符串的值不匹配(尝试将30放入月份部分)。