我想用 date_time 图书馆在提高代表的时间,在我的应用程序。这个应用将产生原子的饲料,而这又授权任务的时间邮票在规定的格式 RFC3339, 例如"1990-12-31T23:59:60Z"或"1990-12-31T15:59:60-08:00".

因此,我怎样格式时间根据这RFC?

我已经阅读 日期的时间输入/输出的文件 所有一天,我似乎无法找出如何把Z结束时,当我需要它。此外,RFC支持的一个任择的小数第二,但是只有一位数字的(例如。"1990-12-31T23:59:60.5Z")(*).我似乎无法找出如何做到这一点。

我总是可以写我自己的格式惯例,读出的不同需要的领域,但是这对我来说似乎是工作对粮食的 date_time 图书馆。

任何经验编写格式对于这个图书馆?或者我做错什么了吗?

(*):在我看来,ABNF定在RFC仅允许一位小数秒钟,但中的示例相同RFC有两位数的分数秒。那是什么意思?

有帮助吗?

解决方案

  1. ABNF从RFC说,必须至少有一位数字后点,有没有定义最大。

  2. 有没有真正需要的Z,你可以使用00:00而不是的,这是可能的方方面面

  3. 在一些罕见的情况下date_time将产生一个"Z"。看到码快照从提高(local_date_time.hpp)表明,这是下:


    std::string zone_name(bool as_offset=false) const
    {
      if(zone_ == boost::shared_ptr()) {
        if(as_offset) {
          return std::string("Z");
        }
        else {
          return std::string("Coordinated Universal Time");
        }
    ...

那里是类似的,如果在zone_abbrev功能...

例使用的这个

slimak@daradei:~/store/kodowanie/moje/test$ cat boost_date_time.cpp
#include "boost/date_time.hpp"
#include "boost/date_time/local_time/local_time.hpp"

using namespace boost::posix_time;
using namespace boost::local_time;

int main()
{
        local_date_time t = local_sec_clock::local_time(time_zone_ptr());
        local_time_facet* lf(new local_time_facet("%Y-%m-%dT%H:%M:%S%F%Q"));
        std::cout.imbue(std::locale(std::cout.getloc(), lf));
        std::cout << t << std::endl;
        return 0;
}
slimak@daradei:~/store/kodowanie/moje/test$ g++ boost_date_time.cpp && ./a.out
2009-01-30T12:15:56Z
slimak@daradei:~/store/kodowanie/moje/test$

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top