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 に答える