Cのstrptime()関数は、無効な日付の検出に失敗します。例:2011-02-31、2011-04-31。この問題に対する他の機能または回避策はありますか
質問する
10755 次
1 に答える
6
を使用mktime
した後、を使用して構造を正規化できますstrptime
。
struct tm ltm = {0};
char buf[] = "2011-02-31";
puts(buf);
strptime(buf, "%Y-%m-%d", <m);
mktime(<m);
strftime(buf, sizeof(buf), "%Y-%m-%d", <m);
puts(buf);
上記の例では、以下の出力が生成されます。
2011-02-31
2011-03-03
前後の文字列mktime
が一致しない場合は、入力文字列が有効な日付ではなかったことがわかります。
どのフィールドが無効であったかを知る必要がある場合は、をltm
呼び出す前に構造のコピーを保存できますmktime
。次に、日(tm_mday
)、月(tm_mon
)、または年(tm_year
)が無効な形式のものであったかどうかを調べることができます。の場合tm_mon
、0
は1月、11
は12月です。の場合tm_year
は、からの年数1900
です。2月の日を検証するときは、うるう年を考慮することを忘れないでください。
于 2012-07-11T07:59:48.870 に答える