ロケール固有の方法で不完全な日付や時刻をフォーマットするにはどうすればよいですか?
私は7つの文字列のセットに日付/時刻を保存しています:
dayOfWeek
- 曜日。([1,7])dayOfMonth
- 月の日。([1,31])monthOfYear
- 月。([0,11])year
- 年。([-∞,∞])hourOfDay
- その日の時間。([0,11])minuteOfHour
- 時間の分。([0,59])meridianOfDay
- その日の子午線。([0,1])
さまざまな理由から、これらのほとんどは Web データで IR を使用して取得され、これらの文字列の一部は空である可能性があります。問題は、そのような不完全な日付/時刻をロケール固有の方法でフォーマットする方法です。
私が現在していることは、boost.localeを使用して作成し、date_time
完成したさまざまな日付/時刻コンポーネントをそれに追加してからdate_time
、ロケール固有の方法で文字列に保存することです。このようなもの:
date_time dateTime;
if(!dayOfWeek.empty())
dateTime = period::day_of_week(lexical_cast<int>(dayOfWeek));
if(!dayOfMonth.empty())
dateTime = period::day(lexical_cast<int>(dayOfMonth));
if(!monthOfYear.empty())
dateTime = period::month(lexical_cast<int>(monthOfYear));
if(!year.empty())
dateTime = period::extended_year(lexical_cast<int>(year));
if(!hourOfDay.empty())
dateTime = period::hour_12(lexical_cast<int>(hourOfDay));
if(!minuteOfHour.empty())
dateTime = period::minute(lexical_cast<int>(minuteOfHour));
if(!meridianOfDay.empty())
dateTime = period::am_pm(lexical_cast<int>(meridianOfDay));
std::stringstream stringStream;
stringStream.imbue(desiredLocale);
stringStream << dateTime;
std::string localeSpecificDateTime = stringStream.str();
これはある程度機能します。フォーマットされたロケールがありますdate_time
。ただし、 I start withにより、不完全なフィールドにはnowの日付/時刻が入力されます。date_time
の書式設定に含まれないように、不完全なフィールドにフラグを立てることができれば完璧ですdate_time
。
PS :ロケールごとに127 (2 7 -1) の書式設定文字列を維持できることはわかっていますが、そのような文字列を作成/検索して維持するのは狂気のレシピのようです!