3

ロケール固有の方法で不完全な日付や時刻をフォーマットするにはどうすればよいですか?

私は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) の書式設定文字列を維持できることはわかっていますが、そのような文字列を作成/検索して維持するのは狂気のレシピのようです!

4

0 に答える 0