2

Now()によって返された値を doubleに変換してから、別の関数で使用しようとしています。

procedure TForm1.FormCreate(Sender: TObject);
begin
    MyFunction_1(Now);
end;

procedure MyFunction_1(TheTime : Double);
begin
    MyFunction_2(TheTime);
end;

procedure MyFunction_1(ModificationDate : Double);
begin
    if JulianDateToDateTime(ModificationDate) < 12345 then
       ...
end;

しかし問題は、現在の時刻の値が正しく渡されないことです。JulianDateToDateTime(Now);次のような戻り値の簡単なテスト:

0/0/0000 16:10:16

私はそれが本当に基本的なものだと確信していますが、それが何であるかを理解することはできません

何か助けてください?!!

4

2 に答える 2

5

あなたはそれを逆にやっています。:-)

JulianDateToDateTimeユリウス日をパラメーターとして取り、TDateTime を返します。TDateTime を引数として取りません。そのため、間違った結果が得られます。私はあなたが反対の方向に行くつもりだと思います ( DateTimeToJulianDate)。

Delphiのドキュメントから:

JulianDateToDateTime を呼び出して、ユリウス日を対応する TDateTime 値に変換します。

DateTimeToJulianDate を呼び出して、TDateTime 値を対応するユリウス日に変換します。

違いを示す簡単なサンプルを次に示します。

uses DateUtils;

procedure TForm2.FormShow(Sender: TObject);
var
  TodaysDate: TDateTime;
  JDate: TDateTime;
begin
  TodaysDate := Date;
  JDate := DateTimeToJulianDate(TodaysDate);
  ShowMessage('Today: ' + FloatToStr(TodaysDate) + #13 +
              'JDate: ' + FloatToStr(JDate) );
end;

出力は次のとおりです。

JulianDateToDateTime の例

TDateTimeタイプの変数をもう 1 つ追加して使用しようとするとJulianDateToDateTime、範囲例外が発生することに注意してください。

BadDate: TDateTime;
...

BadDate := JulianDateToDateTime(TodaysDate);   // raises exception
于 2012-06-03T19:18:05.973 に答える
2

Now()unit で定義された であるTDateTimeタイムスタンプを返します。DoubleSystem

TDateTime = type Double;

ユリウス日に変換する場合は、次のように入力する必要がありますDateTimeToJulianDate

DateTimeToJulianDate(Now)
于 2012-06-03T19:26:36.103 に答える