c++ - 如何将 boost::gregorian::date 转换为 mm/dd/yyyy 格式,反之亦然?

标签 c++ boost time

Boost 具有几个转换为其他字符串格式的函数 here , 但没有转换成必要的 mm/dd/yyyy 格式。目前我正在通过以下方式进行:

 std::string dateAsMMDDYYYY( const boost::gregorian::date& date )
 {
    std::string yyyymmdd = boost::gregorian::to_iso_string( date );
    std::string ret = yyyymmdd.substr(4,2) + "/" + yyyymmdd.substr(6,2) + "/" + yyyymmdd.substr(0,4);
    return ret;
 }

即只是从 to_iso_string() 返回的值中删除数字。这看起来很粗鲁,我正在寻找一种更优雅的方式来执行这种转换。我还需要有关如何执行向后转换的建议(即从 'mm/dd/yyyy' 字符串到 boost::gregorian::date)

感谢任何帮助。提前致谢。

最佳答案

boost 具有相当多的用途 date/time IO设施

const std::locale fmt(std::locale::classic(),
                      new boost::gregorian::date_facet("%m/%d/%Y"));
std::string dateAsMMDDYYYY( const boost::gregorian::date& date )
{
    std::ostringstream os;
    os.imbue(fmt);
    os << date;
    return os.str();
}

逆向转换:

const std::locale fmt2(std::locale::classic(),
                       new boost::gregorian::date_input_facet("%m/%d/%Y"));
boost::gregorian::date MMDDYYYYasDate( const std::string& str)
{
    std::istringstream is(str);
    is.imbue(fmt2);
    boost::gregorian::date date;
    is >> date;
    return date;
}

关于c++ - 如何将 boost::gregorian::date 转换为 mm/dd/yyyy 格式,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7162457/

相关文章:

c++ - 无锁数据结构中的非 POD 类型

windows - 如何使使用 CMake 构建的可执行文件可以访问 Boost DLL?

iphone - 在 iPhone 编程中寻找时间

c++ - 在 C++ 中声明内联但实际上内联函数是否合法

c++ - 容量是否复制到 vector 中?

c++ - SSE:将__m128和__m128i转换为两个__m128d

jQuery 平滑滚动片段以不同的速度工作

c++ - OCX 的调试和发布版本不兼容 "Variable uses an Automation type not supported in Visual Basic"

java - 如何在 Java 中创建 boost 风格的函数对象?

linux - 如何在 Bash 中将秒数转换为分秒数?