見出し画像

Notes C API探訪: TIMEDATE(データ型)その2

その1はこちらです。

繰り返しになりますが、TIMEDATE型は日時データ型です。今回は日時データを操作するための関数を紹介します。

BOOL LNPUBLIC TimeDateAdjust (
  TIMEDATE far *Time,
  int seconds,
  int minutes,
  int hours,
  int days,
  int months,
  int years);

TimeDateAdjust

TimeDateAdjust関数は、Timeで受け取った日時を、秒、分、時、日、月、年の単位で一括調整します。戻り値は、成功時にFALSEを返します。

int LNPUBLIC TimeDateCompare (const TIMEDATE far *t1, const TIMEDATE far *t2);
int LNPUBLIC TimeDateCollate (const TIMEDATE far *t1, const TIMEDATE far *t2);
#define TimeDateEqual(a,b) ((BOOL)TimeDateCollate(a,b)==0)

TimeDateCompare、TimeDateCollate、TimeDateEqual

TimeDateCompare関数、TimeDateCollate関数ともに2つの日時を比較します。t1よりt2が大きければ-1、小さければ1、等値なら0を返します。TimeDateEqualマクロは2つの日時が等値かどうかを返します。
2つの関数の違いはワイルドカードの扱いです。日時におけるワイルドカードとは、日付部分と時刻部分で「なんらかの時間」を表すものです。日付にワイルドカードが指定されている場合、「****/**/** 12:34:56」みたいなイメージです。時刻にワイルドカードが指定されている場合は、「2021/12/24 **:**:**」みたいなイメージになります。日時にワイルドカード値が含まれていると、TimeDateCollate関数では正しく比較できませんが、高速に動作します(等値はワイルドカードを含んでいても動作します)。逆にTimeDateCompare関数はワイルドカードが指定されていても正しく比較できますが、その分処理が遅くなります。

LONG LNPUBLIC TimeDateDifference (
  const TIMEDATE far *t1,
  const TIMEDATE far *t2);
void LNPUBLIC TimeDateDifferenceFloat (
  const TIMEDATE far *t1,
  const TIMEDATE far *t2,
  NUMBER far *difference);

TimeDateDifference、TimeDateDifferenceFloat

TimeDateDifference関数、TimeDateDifferenceFloat関数は、ともに2つの日時の差を秒数で返します。前者はLONG値、後者はNUMBER型(実体は倍精度小数点数)で返します。t1からt2を引いて計算するので、t1が大きい場合は正の数、t2が大きい場合は負の数になります。なお、タイムゾーンが異なる場合は共通化されます。

STATUS LNPUBLIC TimeDateIncrement (TIMEDATE far *Time, LONG Interval);

TimeDateIncrement

TimeDateIncrement関数は、Timeで与えられた日時を増減させます。Interval値は10ms単位で指定するので、100なら1秒、6,000なら1分、360,000なら1時間になります。戻り値はSTATUS型です。失敗の要因としては、時刻にワイルドカードが指定されていると、ERR_TREQというエラー値を返します。

#define	TIMEDATE_MINIMUM	0
#define	TIMEDATE_MAXIMUM	1
#define	TIMEDATE_WILDCARD	2
void LNPUBLIC TimeConstant(WORD, TIMEDATE far *);

TimeConstant

TimeConstant関数は特殊な日時定数を返します。
第1引数にTIMEDATE_MINIMUMを渡すと、日時のヌル値のような値を返します。
TIMEDATE_MAXIMUMを渡すと、日時の最大値を返します。
TIMEDATE_WILDCARDを渡すと、日付、時刻ともにワイルドカード化された日時値を返します。ちなみに、日付のワイルドカード値はANYDAY、時刻のワイルドカードはALLDAYという名前の定数になっています。

この記事が気に入ったらサポートをしてみませんか?