5

私のアプリケーションでは、あるデータベースから読み取り、別のデータベースに書き込みます。アプリは迅速で汚いので、クエリとクエリのAsString両方を使用して読み書きしています。FieldByNameParamByName

Dateこれは、データ型がどこであるかを除いて、私のすべてのユースケースで機能しますDateTime

私が知る限りFieldByName.AsString、システムShortDateTime形式を使用して日付を(私の場合は)dd/mm/yyyyとして返します。データベースは、日付がyyyy-mm-ddとして書き込まれることを想定しています

Delphi Basicsによると、必要なものを設定できるはずですがShortDateFormat、XE5 ではそうではないようです (正しいですか?)。

ここをさらに掘り下げると、ローカル設定をオーバーライドするために使用されるこれら 2 つの質問が返されます。TFormatSettingsただし、これらは両方とも結果の FormatSettingsStrToDateFormatDateTime直接使用します。

そこで2つ質問

1) アプリケーションに System をオーバーライドするように指示できますShortDateFormatか?

2) もしそうなら、どのように (そうでなければ、私はプラン B を持っていますか?)

4

1 に答える 1

7

日付と時刻の形式にグローバル変数を使用することは、元の RTL 設計者がずっと前に犯した間違いでした。単一パラメーターなど、グローバル形式の設定に依存する関数はStrToDate、下位互換性のために保持されていますが、使用しないでください。

日付/時刻と文字列の間の変換については、次のことを行う必要があります。

  1. TFormatSettings日付形式でインスタンスを初期化します。
  2. 2 つのパラメーターを呼び出して、文字列から日付に変換するためStrToDateにを渡します。TFormatSettings
  3. 反対方向に変換FormatDateTimeするときに a を受け入れるオーバーロードを呼び出します。TFormatSettings

さて、あなたの質問の要点です。説明したシナリオでは、日付と時刻に文字列をまったく使用しないでください。AsDateTimeではなく使用しAsStringます。日付/時刻を文字列として格納するデータベース列がある場合は、TFormatSettingsベースの変換関数を使用して、その設計上の問題を回避する必要があります。

これをすべて文字列で行うことに完全に固執しており、そうでなければ説得できない場合は、FormatSettings.ShortDateFormatfromを使用しSysUtilsて短い日付形式を制御する必要があります。

于 2013-10-31T15:25:01.787 に答える