标签: boost-date-time

使用boost date_time来解析和创建HTTP日期

我正在编写一种HTTP代理,所以我需要做三件事:

  1. 给出RFC 2616,sec 3.3中指定的3种格式中的任何格式的HTTP日期,
  2. 将文件日期时间转换为HTTP日期字符串,和
  3. 将日期输出为字符串.

作为参考,这些是我需要解析的日期时间的示例.我只会输出第一种格式:

  Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123
  Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
  Sun Nov  6 08:49:37 1994       ; ANSI C's asctime() format
Run Code Online (Sandbox Code Playgroud)

我很确定Boost date_time可以完成所有这些,但是我遇到了一些问题.有没有人有代码可以做到这一点?也许我并没有熟练使用谷歌,但我无法找到一个如何在任何地方提升的例子.

谢谢你的帮助!

更新:我有一个解决方案,但第二个解析器有错误的一年(我猜因为它是一个2位数的年份),最后一个解析器给出了一个例外(见下面的输出).

try
{
  // output time now in GMT
  // format we want: Sun, 06 Nov 1994 08:49:37 GMT
  boost::local_time::local_date_time t(boost::local_time::local_sec_clock::local_time(boost::local_time::time_zone_ptr()));
  boost::local_time::local_time_facet* lf(new boost::local_time::local_time_facet("%a, %d %b %Y %H:%M:%S GMT"));
  std::cout.imbue(std::locale(std::cout.getloc(), lf));
  std::cout << t …
Run Code Online (Sandbox Code Playgroud)

c++ boost http boost-date-time

5
推荐指数
2
解决办法
5365
查看次数

如何获得当前的UTC偏移(时区)?

如何获取当前UTC偏移量(如时区,但只是当前时刻的UTC偏移量)?

我需要一个像"+02:00"这样的答案.

c++ boost-date-time

5
推荐指数
1
解决办法
8222
查看次数

如何使用boost Date_Time获得GMT时间(以毫秒为单位)?

有没有一种简单的方法可以从boost Date_Time库中获取当前GMT时间(以毫秒为单位)?

这是一个使用的例子time_of_day,我不想要time_of_day但是GMT的总时间如下long long int:

boost::posix_time::ptime time =
          boost::posix_time::microsec_clock::universal_time();
boost::posix_time::time_duration duration( time.time_of_day() );  // ???
long long int timeInMilliseconds = duration.total_milliseconds();
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-date-time

5
推荐指数
1
解决办法
5289
查看次数

从提升日期对象获取月份

我有一个boost :: date对象.当我在对象上调用month()接口时,它返回对象所持有的月份,但是以字符串形式返回.有没有办法可以获得与月份相关的数字?即

date mySampleDate = date_from_tm(tm_myDate) ;
cout<<mySampleDate.month() ; //Gives the output as May/Jun/Jul etc. I need 5/6/7 etc.
Run Code Online (Sandbox Code Playgroud)

我需要在不将boost对象恢复到tm结构的情况下得到它.这会导致过多的转换和可能的性能损失.

c++ boost boost-date-time

5
推荐指数
1
解决办法
807
查看次数

带有格里高利日期的unordered_map

我想存储boost::gregorian::date为一个键,boost::unordered_map但我无法编译代码,因为它缺少这个类的正确哈希函数.

  1. 一个简单的解决方案是转换std::string并存储它.我可能想避免这种解决方案,因为使用字符串非常昂贵.
  2. 我试图找到一些函数将日期导出到数字,但我只能阅读该day()函数,我不确定这是否真的合适.
  3. 也许我可以计算出我的约会和参考日期之间的天数?

有没有其他更好的方法来存储日期或功能导出日期作为数字?

c++ boost-date-time boost-unordered

5
推荐指数
1
解决办法
397
查看次数

如何获取std :: locale的日期和时间的当前"本地化模式"

到目前为止,我能够获取当前的语言环境,但我想获取该特定语言环境的日期格式.可以使用标准库完成此操作.

#include <locale>

int _tmain(int argc, _TCHAR* argv[])
{
   // Print the current locale
    std::cout << std::locale("").name().c_str() << "\n";

    // TODO: get the locale's date pattern, example for US it's (mm/dd/yyyy)
    std::cout << "date pattern:  \n";
}
Run Code Online (Sandbox Code Playgroud)

c++ windows locale boost-date-time c++-standard-library

5
推荐指数
1
解决办法
1774
查看次数

如何根据RFC 3339格式化boost :: date_time-object

我想date_time在boost中使用库来表示我的应用程序中的时间.此应用程序将生成Atom订阅源,后者又以RFC 3339中指定的格式强制设置时间戳,例如"1990-12-31T23:59:60Z"或"1990-12-31T15:59:60-08:00 ".

那么,如何根据此RFC格式化时间?

我一整天都在阅读日期时间输入/输出文档,我似乎无法找到如何在需要时将Z放在最后.此外,RFC支持可选的小数秒,但只支持其一位数(例如"1990-12-31T23:59:60.5Z")(*).我似乎无法找到如何做到这一点.

我总是可以编写自己的格式化例程来读出不同的需要字段,但在我看来,这似乎是在对付date_time图书馆.

有没有为这个库编写格式化程序的经验?或者我做错了什么?

(*):在我看来,RFC中给出的ABNF只允许一位数的小数秒,但同一RFC中的示例有两位数的小数秒.那是什么意思?

c++ rfc3339 boost-date-time

4
推荐指数
1
解决办法
3973
查看次数

从时钟获取当前日期

我这样做

 boost::gregorian::date current_date(boost::date_time::day_clock::local_day());
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

‘template<class date_type> class boost::date_time::day_clock’ used without template parameters  
Run Code Online (Sandbox Code Playgroud)

我必须做些什么呢?

参考http://www.boost.org/doc/libs/1_47_0/doc/html/date_time/gregorian.html#date_construct_from_clock

c++ boost boost-date-time

4
推荐指数
1
解决办法
3683
查看次数

Boost,如何解析以下字符串到日期/时间

我有以下毫/秒精度字符串来解析某种提升日期时间.

std::string cell ="20091201 00:00:04.437";
Run Code Online (Sandbox Code Playgroud)

我看过关于方面的文档.像这样的东西

date_input_facet* f = new date_input_facet();
f->format("%Y%m%d %F *");
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使用它们.

我尝试使用从StackOverflow中清除的代码来编写这个程序,但我无法让millis显示:

#include <string>
#include <iostream>
#include <sstream>
#include <fstream>
#include <map>

#include <boost/algorithm/string.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time.hpp>

namespace bt = boost::posix_time;

const std::locale formats[] =
{
    std::locale(std::locale::classic(),new bt::time_input_facet("%Y%m%d %H:%M:%S.f")),
    std::locale(std::locale::classic(),new bt::time_input_facet("%Y-%m-%d %H:%M:%S")),
    std::locale(std::locale::classic(),new bt::time_input_facet("%Y/%m/%d %H:%M:%S")),
    std::locale(std::locale::classic(),new bt::time_input_facet("%d.%m.%Y %H:%M:%S")),
    std::locale(std::locale::classic(),new bt::time_input_facet("%Y-%m-%d"))
};

const size_t formats_n = sizeof(formats) / sizeof(formats[0]);

std::time_t pt_to_time_t(const bt::ptime& pt)
{
    bt::ptime timet_start(boost::gregorian::date(1970,1,1));
    bt::time_duration diff = pt - timet_start;

    return diff.ticks()/bt::time_duration::rep_type::ticks_per_second;

}

void …
Run Code Online (Sandbox Code Playgroud)

c++ boost-date-time

4
推荐指数
1
解决办法
3854
查看次数

使用 boost::date,如何计算“上周一”?

这就是人们如何使用“两天前”获得“两天前”的信息boost::date

boost::gregorian::date today = boost::gregorian::day_clock::local_day();
boost::date_time::day_functor<boost::gregorian::date> day_offset(-2);
boost::gregorian::date modified = today + day_offset.get_offset(today);
Run Code Online (Sandbox Code Playgroud)

如何计算代表“上周一”的日期?

c++ boost-date-time

4
推荐指数
1
解决办法
804
查看次数