入力文字列が日付/時刻文字列の地域設定に一致しないため、エラーが発生しています。
uses
..., SysUtils;
var
OldShortDateFormat: string;
OldDateSeparator: Char;
input: string;
dt: TDateTime;
begin
input := ...;
OldShortDateFormat := ShortDateFormat;
OldDateSeparator := DateSeparator;
ShortDateFormat := 'yyyymmdd'; // or whatever format you need...
DateSeparator := '/'; // or whatever you need
try
dt := StrToDate(input);
finally
ShortDateFormat := OldShortDateFormat;
DateSeparator := OldDateSeparator;
end;
// use dt as needed...
end;
:
通常は、私は事前にそのグローバルShortDateFormat
とDateSeparator
変数を設定し、SysUtils
単位でStrToDate()
機能を使用することをお勧めして、後でそれらを復元なり、例えば(デルファイ7はTFormatSettings
レコードの導入に先行します) (20170901
)
は残念ながら、StrToDate()
は日付コンポーネント(すなわち2017/09/01
)の間の区切りを持つように入力文字列が必要ですが、あなたの入力文字列にはありません。 StrToDate()
ShortDateFormat
にセパレータが指定されていない場合でも、文字列を解析するときにDateSeparator
を#0
に設定することはできません。
は、だからそれはオプションを1つだけ残し - 例えば、SysUtils
単位でEncodeDate()
機能を使用し、個々の成分を抽出するために、手動で文字列を解析し、:
uses
..., SysUtils;
var
wYear, wMonth, wDay: Word;
input: string;
dt: TDateTime;
begin
input := ...;
wYear := StrToInt(Copy(input, 1, 4));
wMonth := StrToInt(Copy(input, 5, 2));
wDay := StrToInt(Copy(input, 7, 2));
// or in whatever order you need...
dt := EncodeDate(wYear, wMonth, wDay);
// use dt as needed...
end;
DateToStr()
機能も地域の設定の対象となります。ただし、出力でDateSeparator
を省略することができます。だから、次のいずれかを実行できます
利用目的の形式にグローバルShortDateFormat
変数を設定DateToStr()
、:
uses
..., SysUtils;
var
OldShortDateFormat: string;
dt: TDateTime;
output: string;
begin
dt := ...;
OldShortDateFormat := ShortDateFormat;
ShortDateFormat := 'yyyymmdd'; // or whatever format you need...
try
output := DateToStr(dt);
finally
ShortDateFormat := OldShortDateFormat;
end;
// use output as needed...
end;
がSysUtils
単位でDecodeDate()
機能を使用してTDateTime
から個々の日付成分を抽出年と月/日の値を使用して独自の文字列をフォーマットします。
uses
..., SysUtils;
var
wYear, wMonth, wDay: Word;
dt: TDateTime;
output: string;
begin
dt := ...;
DecodeDate(dt, wYear, wMonth, wDay);
output := Format('%.4d%.2d%.2d', [wYear, wMonth, wDay]);
// use output as needed...
end;
@LURD:間違いなく、詳細を更新しました。可能であれば、マイナスのマーキングを削除してください。少なくとも私の解決策を得ることができます。前もって感謝します。 –
このような文字列の要素を、例えばCopyを使用して取り出すことは非常に自明です。次に、それらをStrToIntに渡してからEncodeDateに渡すことができます。 –
@DavidHeffernan:システムの地域設定が「2019年9月1日」に変更された場合はどうなりますか?私はすべての可能なフォーマットの世話をする必要があります。 –