StrToDateDef无法正常工作

Jee*_*eva -2 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);
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*nke 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放入月份部分).