0

谁能对我的问题提出建议。我将日期格式设置为“JUL/12 - 12 15:35”,但是当使用 StrToDateTime 时会给出 EConvertError。

我可以用这种包含 2 日期分隔符的格式做什么?


使用下一个代码

    function LocaleFormatStrToDateTime(const S: string): TDateTime;
        var
          LFormatSettings: TFormatSettings;
        begin
          LFormatSettings := GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT);
          LFormatSettings.ShortTimeFormat := FormatSettings.ShortTimeFormat;
          LFormatSettings.TimeSeparator := FormatSettings.TimeSeparator;
          Result := StrToDateTime(S, LFormatSettings);
        end;


----------

**

最好的解决方案是使用 jvDateUtil.StrToDate*

**

4

2 回答 2

5

您的格式完全是非标准的(并且几乎难以理解),因此无法由内置的日期/时间格式化程序处理。

您已经设计了自己的格式,因此您需要编写自己的代码来进行转换。这是大自然告诉你不要使用古怪的日期和时间格式的方式!

于 2012-07-12T14:00:57.923 回答
4

您尝试转换的字符串可能与默认系统格式不兼容。查看方法签名和描述表明您可以覆盖它以满足您的需求,请参见此处的示例。

如果您发布到目前为止的一段代码将会很有帮助,也许您忽略了一些东西。


编辑

我错过了您使用复杂格式的事实,包括日期的多个分隔符,我不确定 delphi 是否支持。

我想在这种情况下,您可以将字符串分成几部分,然后将它们编码为 TDateTime。要将您的月份名称转换为月份编号,您可以遍历LFormatSettings.ShortMonthNames数组,例如:

  String longMonth:= copy(S, 0, 3);
  for i := Low(LFormatSettings.ShortMonthNames) to High(LFormatSettings.ShortMonthNames) do
      if SameText(longMonth, LFormatSettings.ShortMonthNames[i]) then begin
          shortMonth:=FormatFloat('00', i);
          Break;
      end;
于 2012-07-12T12:50:26.393 回答