1月31日に使用するとどのような性能を発揮しますかat midnight next month
? 3月4日ですか、それとも2月28日ですか?それとも3月31日ですか?
ベストアンサー1
この回答の目的は、既に受け取った他の(正しい)回答を補完し、いくつかの追加の技術情報を提供することです。
at
コマンドがコマンドを受信したときNEXT <inc_dec_period>
1、現在の日付を時間構造として使用する(struct tm
2)指定した期間に「1」を追加します。。
したがって、at
コマンドが実行されるとNEXT MONTH
、現在の日付を使用して3月に「1」を追加して、0(1月)が1(2月)になり、1が2(3月)になるようになります。これはdate -d 'now + 1 month'
コマンドと同じです。
今重要な部分は次のdate
とおりです。at
その後、コマンドは、操作後に生成された新しい時間構造を取得し、mktime(3)
新しい絶対時間4を返すライブラリ呼び出しの引数として使用します。mktime(3)
文書には次のように記載されています。
この
mktime()
機能が修正されました。Tm値2構造は次のとおりです。 [...]構造メンバーが有効範囲外になると正規化されます(たとえば、10月40日が11月9日に変更されます)。);
たとえば、次のようになります。
- 現在の日付が2023-08-31の場合、
- コマンドは
next month
、 - 新しい時間構造は2023年9月31日です。
31は9月の有効な間隔を超えているため、文書に記載されているように2023年10月1日に正規化されます。
$ date -d '2023-08-31 + 1 month' --rfc-3339=date
2023-10-01
現在の日付が2023-01-31の場合、同じコマンドの結果at
は時間構造2023-02-31であり、これは2023-03-03に正規化されます。
$ date -d '2023-01-31 + 1 month' --rfc-3339=date
2023-03-03
$ date -d '2024-01-31 + 1 month' --rfc-3339=date # leap year
2024-03-02
1か所inc_dec_period
次のいずれかです。
MINUTE | HOUR | DAY | WEEK | MONTH | YEAR
2tm
構造には、少なくとも次のメンバーが含まれます。
int tm_sec seconds [0,61]
int tm_min minutes [0,59]
int tm_hour hour [0,23]
int tm_mday day of month [1,31]
int tm_mon month of year [0,11]
int tm_year years since 1900
int tm_wday day of week [0,6] (Sunday = 0)
int tm_yday day of year [0,365]
int tm_isdst daylight savings flag
3月の結果が11より大きい場合、年フィールドも1ずつ増加します。
4カレンダー時間を表すデータ型を返しますmktime
。time_t
絶対時間値として解釈した場合、epoch 1970-01-01 00:00:00 +0000(UTC)から経過した秒数を示します。