文字列の日付を解析する関数を作成できますが、ここで車輪を再発明しているように感じます。1/4/2000 の文字列日付から 20000104 のようなより使いやすい int に取得するための、おそらく C++ に組み込まれた高速な方法はありますか?
質問する
13288 次
2 に答える
3
検証を行うための組み込みのC++の方法も必要でない限り、「明らかな」解析は次のとおりです。
int parseDate(const std::string &input) {
int month;
int day;
int year;
if (std::sscanf(input.c_str(), "%d/%d/%d", &month, &day, &year) != 3) {
// handle error
} else {
// check values to avoid int overflow if you can be bothered
return 10000 * year + 100 * month + day;
}
}
コードタイプの安全性を数行記述しsscanf
たい場合は、代わりにストリームエクストラクタを使用できます。
確かに、標準ライブラリにはあなたの10000 * year + 100 * month + day
ために行うことは何もありません。その正確な値に縛られていない場合は、正しい順序の整数が必要なだけです。次に、プラットフォームにいわゆる「ユリウス日」を通知する関数があるかどうかを確認できます。
于 2013-01-29T11:15:24.373 に答える
2
標準ライブラリ関数は ですstrptime()
が、C++ でどの程度「クリーン」と見なされるかはわかりません。
で問題ない場合はstrptime()
、次のように使用します。
struct tm when;
strptime("1/4/2000", "%m/%d/%y", &tm); // Note: should check return value.
const int sortable = 10000 * tm.tm_year + 100 * tm.tm_month + tm.tm_day;
もちろん、必要に応じて Boost を使用できます。関連するコーナーはPosix Timeのようです。
于 2013-01-29T10:19:00.390 に答える