Boost中获取本地时间表示的秒钟值时的一点小问题

Boost的date_time库功能虽然强大,但是遗憾的是,它并没有提供获取本地时间表示的秒钟值的方法,例如类似于Java中的getSecond方法。不过官方提供了一个example来解决此问题,示例代码如下,原文可参考:http://www.boost.org/doc/libs/1_54_0/doc/html/date_time/examples.html#date_time.examples.seconds_since_epoch

#include "boost/date_time/local_time/local_time.hpp"
  #include <iostream>

  int main()
  {
    using namespace boost::gregorian; 
    using namespace boost::local_time;
    using namespace boost::posix_time;
    
    tz_database tz_db;
    try {
      tz_db.load_from_file("../data/date_time_zonespec.csv");
    }catch(data_not_accessible dna) {
      std::cerr << "Error with time zone data file: " << dna.what() << std::endl;
      exit(EXIT_FAILURE);
    }catch(bad_field_count bfc) {
      std::cerr << "Error with time zone data file: " << bfc.what() << std::endl;
      exit(EXIT_FAILURE);
    }

    time_zone_ptr nyc_tz = tz_db.time_zone_from_region("America/New_York");
    date in_date(2004,10,04);
    time_duration td(12,14,32);
    // construct with local time value
    // create not-a-date-time if invalid (eg: in dst transition)
    local_date_time nyc_time(in_date, 
                             td, 
                             nyc_tz, 
                             local_date_time::NOT_DATE_TIME_ON_ERROR);

    std::cout << nyc_time << std::endl;

    ptime time_t_epoch(date(1970,1,1)); 
    std::cout << time_t_epoch << std::endl;

    // first convert nyc_time to utc via the utc_time() 
    // call and subtract the ptime.
    time_duration diff = nyc_time.utc_time() - time_t_epoch;

    //Expected 1096906472
    std::cout << "Seconds diff: " << diff.total_seconds() << std::endl;

  }

当使用这段代码时,我需要的本地时间是作为一个字符串传入的,例如“2004-10-04 12:14:32”,我想许多人也是这样的需求吧。。。如果按照代码要求,我需要从字符串中获取到年月日和时分秒的值,然后才能使用它。当时想偷懒,不想对字符串进行处理,所以对其中的几行代码做了如下修改:

	time_zone_ptr nyc_tz = tz_db.time_zone_from_region("Asia/Shanghai");
	ptime myDate = time_from_string("2004-10-04 12:14:32");
	local_date_time nyc_time(myDate,nyc_tz);
本想利用工厂函数time_from_string生成ptime对象,local_date_timie又恰好支持(ptime,time_zone_ptr)形式的构造函数,这样可以让代码变得简洁。但是输出结果是1096892072,比原来的时间晚了8个小时。分析之后发现,不是工厂函数的问题,而是local_date_timie(ptime,time_zone_ptr)这种形式的构造函数会将ptime的时间变为本地时间,对于"Asia/Shanghai"时区来说,正好多了8个小时。

看来,只能乖乖的按照示例中的要求处理传入的字符串了。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值