在Delphi中使用具有文化特定格式的mili第二个DateTime

时间:2016-04-07 11:15:13

标签: delphi datetime delphi-2006

我有以下代码在我的系统上工作正常,因为我的系统的日期时间格式为dd-mm-yyyy,但是在系统的日期时间格式为dd / mm / yyyy的情况下,代码不起作用。< / p>

    try
          fmt.LongDateFormat:='dd-mm-yyyy';
          fmt.DateSeparator  :='-';
          fmt.LongTimeFormat :='hh:nn:ss.z';
          fmt.TimeSeparator  :=':'    ;

          dateTime :=42467.51801;
          strDate :=FormatDateTime('dd-mm-yyyy hh:nn:ss.z', dateTime);
          time := StrToDateTime(strDate,fmt);   

           strDate :=FormatDateTime('dd-mm-yyyy hh:nn:ss.z', time);
        ShowMessage('DateTime := ' +strDate)  ;
         except
         on e: Exception do
            ShowMessage('Exception message = '+e.Message);
end;

格式为dd / mm / yyyy的相同代码在我的系统上不起作用。请帮帮我。

1 个答案:

答案 0 :(得分:1)

您的代码正在使用LongDateFormatLongTimeFormat,但StrToDateTime()不使用这些值。

StrToDate()StrToDateTime()使用ShortDateFormat(和TwoDigitYearCenturyWindow(本例不适用)来解析日期。

StrToTime()StrToDateTime()使用硬编码逻辑来解析时间。您无法指定小时/分钟/秒/毫秒值的顺序/存在,您只能指定TimeSeparatorDecimalSeparatorTimeAMStringTimePMString值。< / p>

请改为尝试:

try
  fmt.ShortDateFormat := 'dd/mm/yyyy';
  fmt.DateSeparator := '/';
  fmt.TimeSeparator := ':';
  fmt.DecimalSeparator := '.';

  dateTime := 42467.51801;
  strDate := FormatDateTime('dd/mm/yyyy hh:nn:ss.z', dateTime, fmt);
  time := StrToDateTime(strDate, fmt);

  strDate := FormatDateTime('dd/mm/yyyy hh:nn:ss.z', time, fmt);
  ShowMessage('DateTime := ' + strDate);
except
  on e: Exception do
    ShowMessage('Exception message = '+e.Message);
end;