Boost.DateTime 使用了 locales 的概念,它来自于 C++ 标准,在 第 5 章 字符串处理 中有概括的介绍。 要格式化一个历法日期,必须创建一个 boost::date_time::date_facet
类型的对象并安装在一个 locale 内。 一个描述新格式的字符串被传递给 boost::date_time::date_facet
的构造函数。 上面的例子传递的是 ,指定格式为:星期几后跟日月年全名: Wednesday, 07 January 2009
。
如果应用程序的基本用户是位于德国或德语国家,最好可以用德语而不是英语来显示星期几和月份。
- #include <boost/date_time/gregorian/gregorian.hpp>
- #include <iostream>
- #include <locale>
- #include <string>
- #include <vector>
- int main()
- {
- std::locale::global(std::locale("German"));
- std::string months[12] = { "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" };
- std::string weekdays[7] = { "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" };
- boost::gregorian::date d(2009, 1, 7);
- df->long_month_names(std::vector<std::string>(months, months + 12));
- df->long_weekday_names(std::vector<std::string>(weekdays, weekdays + 7));
- std::cout.imbue(std::locale(std::cout.getloc(), df));
- std::cout << d << std::endl;
- }
Boost.DateTime 在格式化输入输出方面是非常灵活的。 除了输出类 boost::date_time::date_facet
和 boost::date_time::time_facet
以外,类 boost::date_time::date_input_facet
和 boost::date_time::time_input_facet
可用于格式化输入。 所有这四个类都提供了许多方法,来为 Boost.DateTime 所提供的各种不同对象配置输入和输出的方式。 例如,可以指定 类型的时间长度如何输入和输出。 要弄清楚各种格式化输入输出的可能性,请参考 Boost.DateTime 的文档。