6
var
  tm : string;
  dt : tdatetime;

tm := '2009-08-21T09:11:21Z';
dt := ?

手動で解析できることはわかっていますが、これを行うための組み込み関数または Win32 API 関数があるのだろうか?

4

3 に答える 3

3

何を言っているのかわからないのに、なぜこんなにたくさんの人が口を開けているのかわかりません。私はこの卑劣な仕事をしなければなりません。RADツールですか?しかし、Delphiには本当に素晴らしいアーキテクチャがあることに気付くことがあります。

procedure setISOtoDateTime(strDT: string);
var
  // Delphi settings save vars
  ShortDF, ShortTF : string;
  TS, DS : char;
  // conversion vars
  dd, tt, ddtt: TDateTime;
begin
  // example datetime test string in ISO format
  strDT := '2009-07-06T01:53:23Z';

  // save Delphi settings
  DS := DateSeparator;
  TS := TimeSeparator;
  ShortDF := ShortDateFormat;
  ShortTF := ShortTimeFormat;

  // set Delphi settings for string to date/time
  DateSeparator := '-';
  ShortDateFormat := 'yyyy-mm-dd';
  TimeSeparator := ':';
  ShortTimeFormat := 'hh:mm:ss';

  // convert test string to datetime
  try

    dd := StrToDate( Copy(strDT, 1, Pos('T',strDT)-1) );
    tt := StrToTime( Copy(strDT, Pos('T',strDT)+1, 8) );
    ddtt := trunc(dd) + frac(tt);

  except
    on EConvertError do
      ShowMessage('Error in converting : ' + strDT);
  end;

  // restore Delphi settings
  DateSeparator := DS;
  ShortDateFormat := ShortDF;
  TimeSeparator := TS;
  ShortTimeFormat := ShortTF;

  // display test string
  ShowMessage ( FormatDateTime('mm/dd/yyyy hh:mm:ss', ddtt) );
end;

http://coding.derkeiler.com/Archive/Delphi/comp.lang.pascal.delphi.misc/2006-08/msg00190.html

于 2009-11-25T21:16:00.413 に答える
2

Indy 10 を使用している場合、そのStrInternetToDateTime()およびGMTToLocalDateTime()関数 (IdGlobalProtocolsユニット内) は ISO-8601 形式の文字列を解析できます。

于 2016-10-14T15:04:14.990 に答える
0

これはインターネット プロトコル関連のアクティビティのように見えるため、Win32 API を使用しても問題はありません。ただし、Windows は、約 20 年以上前の履歴日付の UTC との間の変換を正しくサポートしていないことに注意してください。Windows のタイム ゾーン設定には、そのための十分な詳細がありません。

于 2009-10-21T05:27:44.563 に答える