日付文字列 → TDateTimeへの変換を試してみました。
結果
# Delphi
# VarToDateTime
1928/02/01 00:01:00 : 1928/2/1 0:1:0
1928/02/01 00:02:00 : 昭和3年2月1日0時2分
1928/02/01 00:03:00 : 昭3/2/1 0:3
1928/02/01 00:04:00 : S3/2/1 0:4
# StrToDateTime
1928/02/01 00:01:00 : 1928/2/1 0:1:0
1928/02/01 00:02:00 : 昭和3年2月1日0時2分
1928/02/01 00:03:00 : 昭3/2/1 0:3
Error : 2003/02/01 00:04:00 : S3/2/1 0:4
# FPC
# VarToDateTime
1928/02/01 00:01:00 : 1928/2/1 0:1:0
Error : 昭和3年2月1日0時2分
Error : 昭3/2/1 0:3
Error : S3/2/1 0:4
# StrToDateTime
Error : 1928/2/1 0:1:0
Error : 昭和3年2月1日0時2分
Error : 昭3/2/1 0:3
Error : S3/2/1 0:4
---------------------
コード
procedure TForm1.Button1Click(Sender: TObject);
const data : array[0..3] of string = (
'1928/2/1 0:1:0',
'昭和3年2月1日0時2分',
'昭3/2/1 0:3',
'S3/2/1 0:4');
var
i: integer;
JPNEraFormat: TFormatSettings;
strDate, strDate2 : String;
timestamp: TDateTime;
begin
{$ifndef FPC}
JPNEraFormat := TFormatSettings.Create('ja-JP');
{$ENDIF}
JPNEraFormat.ShortDateFormat := 'ggee/m/d';
Memo1.Lines.Text := '# '+ {$ifdef FPC}'FPC'{$ELSE}'Delphi'{$ENDIF};
Memo1.Lines.Add('# VarToDateTime');
for i:=low(data) to high(data) do
try
strDate2 := FormatDateTime('yyyy/mm/dd hh:mm:ss',
VarToDateTime(data[i]));
strDate2 := strDate2 + ' : ' + data[i];
if ('1928' <> Copy(strDate2, 1, 4)) then
Memo1.Lines.Add('Error : '+ strDate2)
else
Memo1.Lines.Add(strDate2);
except
Memo1.Lines.Add('Error : ' + data[i]);
end;
Memo1.Lines.Add('# StrToDateTime');
for i:=low(data) to high(data) do
try
strDate := data[i];
strDate := StringReplace(strDate, '年', '/', []);
strDate := StringReplace(strDate, '月', '/', []);
strDate := StringReplace(strDate, '日', ' ', []);
strDate := StringReplace(strDate, '時', ':', []);
strDate := StringReplace(strDate, '分', '', []);
strDate2 := FormatDateTime('yyyy/mm/dd hh:mm:ss',
StrToDateTime(strDate,JPNEraFormat));
strDate2 := strDate2 + ' : ' + data[i];
if ('1928' <> Copy(strDate2, 1, 4)) then
Memo1.Lines.Add('Error : '+ strDate2)
else
Memo1.Lines.Add(strDate2);
except
Memo1.Lines.Add('Error : ' + data[i]);
end;
end;
|