本文へスキップ

timecmp 関数

timecmp は2つのタイムスタンプを比較し、それらのタイムスタンプが表す瞬間の順序を表す数値を返します。

コードブロック
timecmp(timestamp_a, timestamp_b)
条件戻り値
timestamp_atimestamp_b より前-1
timestamp_atimestamp_b と同じ瞬間0
timestamp_atimestamp_b より後1

タイムスタンプの比較において、timecmp は各タイムスタンプに指定されたUTCオフセットを考慮します。例えば、06:00:00+020004:00:00Zは、最初のタイムスタンプの+0200オフセットを考慮すると、同じ瞬間です。

OpenTofu言語では、タイムスタンプは慣習的にRFC 3339「日付と時刻のフォーマット」構文を使用して文字列で表されます。timecmp は、2つの引数がこの構文に準拠した文字列であることを要求します。

コードブロック
> timecmp("2017-11-22T00:00:00Z", "2017-11-22T00:00:00Z")
0
> timecmp("2017-11-22T00:00:00Z", "2017-11-22T01:00:00Z")
-1
> timecmp("2017-11-22T01:00:00Z", "2017-11-22T00:00:00Z")
1
> timecmp("2017-11-22T01:00:00Z", "2017-11-22T00:00:00-01:00")
0

timecmp は、指定されたタイムスタンプが特定の範囲内にあるかどうかを確認するカスタム条件チェックを定義する際に特に役立ちます。例えば、次のリソースの事後条件は、TLS証明書(またはその他の期限切れになるオブジェクト)が「適用」ステップの時刻から30日より早く期限切れになる場合にエラーを発生させます。

コードブロック
  lifecycle {
postcondition {
condition = timecmp(timestamp(), timeadd(self.expiration_timestamp, "-720h")) < 0
error_message = "Certificate will expire in less than 30 days."
}
}
  • timestamp は、「適用」ステップで評価されたときの現在のタイムスタンプを返します。
  • timeadd は、指定された期間を加算または減算することで、タイムスタンプに対して算術演算を実行できます。