一般に、Delphi では時間を記述するためにいくつかのデータ構造が使用されており、時間の操作は本質的にこれらの構造の操作となります。
TDateTime タイプ:
Delphi で日付と時刻を表す最も一般的に使用されるデータ型は TDateTime 型です。通常の整数と同様に、プログラム内で操作する日付の日付変数を定義できます。 TdateTime 型は、基本的に Double 型の数値です。TdateTime 型は、Delphi では次のように定義されます: type TDateTime = type Double 特定のアルゴリズムは、Double 数値の整数部分を使用し、1989 年 12 月 30 日を表します。基準点を日数で加算および減算します。たとえば、数値 1 は 1900 年 1 月 1 日を表し、数値 -1 は 1989 年 12 月 29 日を表します。小数部分は時間を表現するために使用され、その値は 1 日の合計時間に対する表現する時間の比率です。たとえば、朝の 6 時は 6/24=0.25 となり、6:午前 15 時は (6*60+15)/(24*60)=0.26041666666666666666666666667 TDateTime 型と Double 型の間の相互作用を示すために、いくつかの例を示します。
0 1899/12/30 00:00:00
2.75 1900 年 1 月 1 日 18:00:00
-1.25 1899/12/29 6:00:00
35065 1996 年 1 月 1 日 00:00:00
TdateTimeとDoubleの変換方法は誰でも理解できると思いますので、TDateTimeの動作もDoubleと基本的には同じです。
TTimeStamp タイプ:
これは日付と時刻を記述するために使用される構造体タイプで、Delphi では次のように定義されます。
type TTimeStamp = Record Time: Integer; {午前 0:00 から指定した時刻までのミリ秒数} Date: Integer {今日から指定した日付までの日数} end;
TDateTimeに比べて直感的に高精度な時刻を表現することができ、ミリ秒レベルの演算やより長い時刻を表現する場合によく使われます。
PsystemTime タイプ:
WinApi での時間操作に使用されるポインター構造体。彼の定義は次のとおりです。
タイプ PSystemTime = ^TSystemTime; wMonth: Word; wDay: Word; wSecond: Word;
この構造は主に、WinApi 操作を呼び出すときに使用されます。
さまざまな種類の時間の本質を理解すると、これらの種類の時間を操作するための一連のアイデアが得られると思いますが、Delphi では、これらのプロセスと関数が SysUnit で定義されています。単元では、Delphi の関連関数を紹介します。
時間を操作する関数
日付関数:
定義: 日付: TDateTime;
機能: 現在の日付を返します。
例:
現在の日付 := 日付;
DayOfWeek 関数:
定義: 関数 DayOfWeek(日付: TDateTime): 整数;
機能: 指定された日付の曜日の値を取得し、日曜日から土曜日を表す 1 ~ 7 を返します。
IncMouth関数:
定義: 関数 IncMonth(const Date: TDateTime; NumberOfMonths: Integer): TDateTime;
機能: NumberOfMonths か月後の指定された日付データの日付を検索します。
例:
Date1 := IncMonth(日付,10);
今日が 2002-5-3 の場合、Date1 は 2003-3-3 になります。
IsLeap Year 関数:
定義: 関数 IsLeap Year(年: Word): ブール値;
機能: 指定された年がうるう年かどうかを判断します。
例:
if isLeap Year(2000) then ShowMessage('今年はうるう年です');
今機能:
定義: 関数 Now: TDateTime;
機能: 現在の日付と時刻を取得するために使用されます。
例:
現在の日付時刻 := 現在;
ReplaceDateプロシージャ
定義: プロシージャ ReplaceDate(var DateTime: TDateTime; const NewDate: TDateTime);
機能: パラメーター Newdate の日付部分を使用してパラメーター DateTime の日付部分を置き換えますが、時刻部分は変更しません。
ReplaceDateプロシージャ
定義: プロシージャ ReplaceTime(var DateTime: TDateTime; const NewTime: TDateTime);
機能: パラメーター Newdate の時刻部分を使用してパラメーター DateTime の時刻部分を置き換えますが、日付部分は変更しません。
上記 2 つの処理を併用すると代入に相当します。
時間機能:
定義: 関数時間: TDateTime;
機能: 現在時刻を返します。
例:
現在時刻 := 時間;
さまざまな時刻タイプ間の変換関数
DateTimeToFileDate 関数:
定義: DateTimeToFileDate(DateTime: TDateTime): 整数;
機能: TDateTime 型の時刻を Dos 環境の時刻に変換します。 Dos 環境での時刻へのアクセス方法は、ファイル操作を実行する場合、時刻の一貫性を維持するために、DateTimeToFileDate 関数を使用する必要があります。変換後、返される整数値は、Dos で時間を記述するために使用される値です。
DateTimeToSystemTime プロシージャ:
定義: プロシージャ DateTimeToSystemTime(DateTime: TDateTime; var SystemTime: TSystemTime);
機能: TDateTime 型の時刻を、WinApi 関数を使用して時刻を操作するときに使用される、Win API 関数で使用される TSystemTime 型に変換します。
SystemTimeToDateTime 関数:
定義: 関数 SystemTimeToDateTime(const SystemTime: TSystemTime): TDateTime;
機能: WinApi関数で取得したTSysTemTime型の数値をTDateTime型に変換します。
DateTimeToTimeStamp 関数:
TimeStampToDateTime 関数:
定義: DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp;
関数 TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;
機能: TDataTime タイプと TTimeStamp の間の変換に使用されます。 TDataTime は倍精度浮動小数点を使用して時刻を記述しますが、TTimeStamp は 2 つの整数を使用して時刻をそれぞれ記述します。 2 つの型の違いについては、この記事の冒頭のデータ型の説明セクションを参照してください。
EncodeDate 関数:
定義: 関数 EncodeDate(年、月、日: Word): TDateTime;
機能: 年、月、および日の値を入力し、日付を TDateTime タイプとして返します。年の範囲は 1 ~ 9999、月の範囲は 1 ~ 12、日付の範囲は現在の月に基づきます。この場合、入力された値が範囲外の場合、EConvertError が生成されます。
DecodeDate プロセス:
定義: プロシージャ DecodeDate(日付: TDateTime; var 年、月、日: Word);
機能: TDateTime 型の日付を入力し、年、月、日の値に変換します。入力値が0または0未満の場合、年、月、日はすべて0になります。
EncodeTime 関数:
定義: EncodeTime(時、分、秒、ミリ秒: Word): TDateTime;
機能: 時 (Hour)、分 (min)、秒 (Sec)、マイクロ秒 (MSec) の値を入力し、TDateTime 型の時刻 (0 から 1 までの 10 進数) を返します。 Hour の値の範囲は 0 ~ 23、Min の値の範囲は 0 ~ 59、Sec の値の範囲は 0 ~ 59、MSec の値の範囲は 0 ~ 999 です。入力値が範囲を超えると、 EConvertErrorが発生します。
DecodeTime プロセス:
定義: プロシージャ DecodeTime(Time: TDateTime; var Hour、Min、Sec、MSec: Word);
機能: 時間を入力し、時、分、秒、マイクロ秒 (MSec) に変換します。
TDateTime型とstring型の変換関数:
DateTimeToStr 関数:
DateToStr 関数
TimeToStr 関数
定義: 関数 DateTimeToStr(DateTime: TDateTime): 文字列;
関数 TimeToStr(Time: TDateTime): 文字列;
関数 TimeToStr(Time: TDateTime): 文字列;
機能: TDateTime 型の数値を文字列に変換し、DateTimeToStr は日付と時刻を変換し、DateToStr は日付のみを変換し、TimeToStr は時刻のみを変換します。変換された出力効果は YYYY-MD H:M:S です
StrToDateTime 関数
StrToDate関数
StrToTime関数
定義: 関数 StrToDateTime(const S: string): TDateTime;
関数 StrToDate(const S: string): TDateTime;
関数 StrToTime(const S: string): TDateTime;
機能: 日付と時刻の形式の文字列を TDateTime に変換します。ここで、S は次のような有効な文字列である必要があります。
YY-MM-DD HH:MM:SS 形式。それ以外の場合は、EConvertError イベントがトリガーされ、エラー メッセージが表示されます。
時刻部分の文字列は 2 ~ 3 個の数値文字列で構成され、Windows の地域設定で設定された区切り文字で区切られている必要があります。形式要件は、Windows の地域設定の設定に準拠している必要があります。ここで、HH、MM (時間、分)を追加する必要があります。SS(秒)はオプションです。午前と午後を区別するために最後に午前と午後を追加することもできます。この時点では、システムは 12 時間表記が使用されていると認識します。それ以外の場合は、12 時間表記が使用されます。 24 時間表現が使用されていると見なされます。
日付部分の形式は、Windows の地域設定の短い日付形式に準拠する必要があり、これも 2 ~ 3 個の数値文字列で構成されます。文字列内に数字が 2 つしかない場合は、月と日とみなされます。指定されており、年は現在の年です。
ロケールで 2 桁の年表現が使用されている場合、システムはそれを次のように処理します。
現在の年の開始年の基準値として、03 年を入力します。50 年を入力します。68 年を入力します。
1998 0 1900 1903 1950 1968
2002 0 2000 2003 2050 2068
1998 50 1948 2003 1950 1968
2000 50 1950 2003 1950 1968
2002 50 1952 2003 2050 1968
2020 50 1970 2003 2050 2068
2020 10 2010 2103 2050 2068
まず、地域設定で 2 桁の年の開始年を取得します。たとえば、地域の設定で 2 桁の年の範囲が 1932 年から 2031 年に設定されている場合、開始年は 32 年になります。 0 の場合、年は 2 桁とみなされます。年が実際に 0 より大きい場合は、現在の年の値から開始年の値を引いた値が使用されます。この値以上の場合は今世紀とみなされ、それ以外の場合は次の世紀とみなされます。次に例をいくつか示します。
DateTimeToString プロシージャ:
FormatDateTime 関数:
定義: プロシージャ DateTimeToString(var 結果: 文字列; const 形式: 文字列; DateTime: TDateTime);
関数 FormatDateTime(const 形式: 文字列; DateTime: TDateTime): 文字列;
機能: フォーマット文字列でフォーマットを定義して出力する時刻文字列を取得します。たとえば、「今日は 2002 年 5 月 5 日の金曜日です」を出力したい場合、これら 2 つのメソッドは同じです。関数ですが、1 つは共有変数を介して出力文字列を取得する方法で、もう 1 つは出力文字列を戻り値を介して取得する方法です。フラグと追加の文字列。追加の文字列は、C の Printf 関数と同様に、"" で囲まれます。たとえば、「今日は 2002 年 5 月 5 日金曜日です」の Format 値は '" 今日は "yyyy" year "mm" month "dd" となります。 day 、" dddd'、yyyy、mm、dd、dddd はすべてフォーマット識別子です。さまざまなフォーマット識別子の説明は次のとおりです。
d: 1 つまたは 2 つの整数を使用して日を表示します (1 ~ 31)
dd: 日を表示するには 2 つの整数を使用し、2 桁未満を補うには 0 を使用します (01 ~ 31)
ddd: 現在の週番号を省略形で表示します。Windows の場合は Mon-Sun と表示され、中国語版の場合は dddd と表示されます。
dddd: 現在の週番号を完全な形式で表示します。Windows が英語版の場合は、Monday-SumDay が表示されます。中国語版の場合は、Monday-Sunday が表示されます。
ddddd : ロケールの短い日付形式で出力します。
dddddd : ロケールの長い日付形式で出力します。
m: 1 つまたは 2 つの整数を使用して月を表示します (1 ~ 12)
mm: 月を 2 つの整数で表示します。2 桁に満たない場合は、0 で補います (01 ~ 12)。
mmm: 月名を省略形で表示します。英語版は Jan-Dec で表示されます。中国語版は mmmm と同じです。
mmmm: 完全な方法を使用して月名を表示します。英語版では 1 月から 12 月が表示され、中国語版では 1 月から 12 月が表示されます。
yy:年を2桁の整数(00~99)で表示します。
yyyy:年を4桁の整数(0000~9999)で表示します。
h: 1 つまたは 2 つの整数を使用して時間を表示します (0 ~ 23)
hh: 時を 2 つの整数で表示します。2 桁に満たない場合は 0 を使用します (00 ~ 23)。
n: 分 (0 ~ 60) を表示するには 1 つまたは 2 つの整数を使用します。
nn: 分を表示するには 2 つの整数を使用し、2 桁未満を補うには 0 を使用します (00 ~ 60)。
s: 1 つまたは 2 つの整数を使用して秒を表示します (0 ~ 60)
ss: 秒を表示するには 2 つの整数を使用し、2 桁未満を補うには 0 を使用します (00 ~ 60)
z: ミリ秒を1~2の整数(0~999)で表示します。
zzz: ミリ秒を 3 桁の整数で表示します。3 桁に満たない場合は 0 で補います (000 ~ 999)。
tt : ロケールの形式で日付を表示します。
am/pm: 12 時間表示に使用されます。AM は 0 から 12 時を表し、pm は 12 から 0 時を表します。
時間関連の変数:
Delphi は、ローカル設定に関するさまざまな情報をカプセル化し、時間に関連する一連の変数を定義します。
日付区切り文字:文字
年、月、日を区切るために使用される日付区切り文字
時間区切り文字:文字
時、分、秒を区切るために使用される時刻区切り文字
ShortDateFormat: 文字列
ロケールでの短い日付形式の定義。
LongDateFormat: 文字列
ロケールでの長い日付形式の定義。
ShortTimeFormat: 文字列
ロケールでの短時間フォーマットの定義。
LongTimeFormat: 文字列
ロケールでのロングフォーマットの定義。
TimeAMString: 文字列
朝を表す文字列
TimePMString: 文字列
午後を表すために使用される文字列
ShortMonthNames: 文字列の配列[1..12]。
月名の省略形に使用される配列は、FormatDateTime を使用するときに表示される mmm によって識別される文字列です。
LongMonthNames: 文字列の配列[1..12]。
月の名前を完全に表すために使用される配列は、FormatDateTime を使用するときに表示される mmmm によって識別される文字列です。
ShortDayNames: 文字列の配列[1..7]。
曜日名の短縮に使用される配列は、FormatDateTime を使用するときに表示される ddd によって識別される文字列です。
LongDayNames: 文字列の配列[1..7]。
週の名前を完全に表すために使用される配列は、FormatDateTime を使用するときに表示される ddd によって識別される文字列です。
二桁年世紀ウィンドウ:ワード = 50;
2 桁の年を使用する場合の開始年。
これで、Delphi の時間操作に関する部分は基本的に完了しました。読者は、実際のプログラミングを使用するときに、必要に応じて対応するヘルプ ファイルを確認して、遭遇する問題を解決することもできます。