实现locale格式化的时间输出

时间:2014-01-04 04:38:02

标签: c++ datetime locale overloading

我试图在程序中实现在How to get current time and date in C++?中给出的用C ++打印语言环境时间的代码。

我做了一些修正以使代码适应我的标题,但它仍然给我一个错误“方法'put'无法解决”。我是新手所以我找不到答案。我在Eclipse上。我已将编辑器的可伸缩性编号设置为50000.此外,该文件在包含和代码之间还有另一个类。

代码是这样的:

#ifndef LISTA_H_
#define LISTA_H_

#include "nodel.h"
#include "hntable.h"

#include <iostream>
#include <string>
#include <iterator>
#include <time.h>

using namespace std;

class timefmt
{
public:
    timefmt(std::string fmt)
        : format(fmt) { }

    friend ostream& operator <<(ostream &, timefmt const &);

private:
    string format;
};


std::ostream& operator <<(std::ostream& os, timefmt const& mt)
{
    std::ostream::sentry s(os);

    if (s)
    {
        time_t t = time(0);
        tm const* tm = localtime(&t);
        ostreambuf_iterator<char> out(os);

        use_facet<time_put<char>>(os.getloc())
            .put(out, os, os.fill(),
                 tm, &mt.format[0], &mt.format[0] + mt.format.size());
    }

    os.width(0);

    return os;
}

#endif /* LISTA_H_ */

编辑:如果我包含“locale”,之前显示的错误已解决但是: `operator&lt;&lt;(std :: ostream&amp;,timefmt const&amp;)'的多重定义。 有关于此的任何提示吗?

1 个答案:

答案 0 :(得分:1)

只需添加#include <locale>和您的代码compiles

即可