名前 題名 ▼ takaさん > VarToDateTime, StrToDateTime > を使った日付変換は、 > fpcで見事に撃沈されてしまいましたが > > Win apiのVarDateFromStrを使えば > fpcで日付の変換ができることがわかりました。 > > FPCは、 Active-X / OLE objects に対応していないので > 関数を自分で定義する必要あります > > 結果 > # Delphi > H30/1/2 3:2:1 ---> 2018/01/02 03:02:01 > 平成30年3月1日 ---> 2018/03/01 00:00:00 > > # FPC > H30/1/2 3:2:1 ---> 2018/01/02 03:02:01 > 平成30年3月1日 ---> 2018/03/01 00:00:00 > > code[utf-8] ----------------------- > > {$ifdef fpc} > //{$codepage utf-8} > function VarDateFromStr(const strIn: WideString; alcid: DWORD; > dwFlags: Longint; out dateOut: Double): HRESULT; stdcall; > external 'OleAut32.dll' name 'VarDateFromStr'; overload; > function VarDateFromStr(const strIn: WideString; alcid: DWORD; > dwFlags: Longint; out dateOut: TDateTime): HRESULT; stdcall; > external 'OleAut32.dll' name 'VarDateFromStr'; overload; > // https://msdn.microsoft.com/en-us/library/windows/desktop/ms221395(v=vs.85).aspx > // TDateTime, DATE型は0の開始日は同じ > {$endif} > > procedure TForm1.Button2Click(Sender : TObject); > const dataText : array[0..1] of WideString = ( > 'H30/1/2 3:2:1', '平成30年3月1日'); > // fpc: 「ファイル設定 : エンコード: UTF8-BOM付き」以外になっていると漢字が破損します > var > Adatetime : TDateTime; > i : Integer; > s : string; > begin > Memo1.Lines.Text := '# '+ {$ifdef FPC}'FPC'{$ELSE}'Delphi'{$ENDIF}; > for i:=0 to High(dataText) do > begin > Adatetime := 0; > s := dataText[i] + (' ---> '); > if (S_OK = VarDateFromStr({$ifdef FPC}dataText[i]{$ELSE}PWideChar(dataText[i]){$ENDIF} > , GetThreadLocale, LOCALE_NOUSEROVERRIDE, Adatetime)) then > s := s + FormatDateTime('yyyy/mm/dd hh:mm:ss', VarToDateTime(Adatetime)); > Memo1.Lines.Add(s); > end; > end; > GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link