Boost.DateTime 使用了 locales 的概念,它来自于 C++ 标准,在 第 5 章 字符串处理 中有概括的介绍。 要格式化一个历法日期,必须创建一个 boost::date_time::date_facet 类型的对象并安装在一个 locale 内。 一个描述新格式的字符串被传递给 boost::date_time::date_facet 的构造函数。 上面的例子传递的是 ,指定格式为:星期几后跟日月年全名: Wednesday, 07 January 2009

    如果应用程序的基本用户是位于德国或德语国家,最好可以用德语而不是英语来显示星期几和月份。

    1. #include <boost/date_time/gregorian/gregorian.hpp>
    2. #include <iostream>
    3. #include <locale>
    4. #include <string>
    5. #include <vector>
    6. int main()
    7. {
    8. std::locale::global(std::locale("German"));
    9. std::string months[12] = { "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" };
    10. std::string weekdays[7] = { "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" };
    11. boost::gregorian::date d(2009, 1, 7);
    12. df->long_month_names(std::vector<std::string>(months, months + 12));
    13. df->long_weekday_names(std::vector<std::string>(weekdays, weekdays + 7));
    14. std::cout.imbue(std::locale(std::cout.getloc(), df));
    15. std::cout << d << std::endl;
    16. }

    Boost.DateTime 在格式化输入输出方面是非常灵活的。 除了输出类 boost::date_time::date_facetboost::date_time::time_facet 以外,类 boost::date_time::date_input_facetboost::date_time::time_input_facet 可用于格式化输入。 所有这四个类都提供了许多方法,来为 Boost.DateTime 所提供的各种不同对象配置输入和输出的方式。 例如,可以指定 类型的时间长度如何输入和输出。 要弄清楚各种格式化输入输出的可能性,请参考 Boost.DateTime 的文档。