(一)boost库之日期、时间

时间:2022-09-15 09:31:33

(一)boost库之日期、时间

一、计时器 

计时器,通常在一个项目中统计一个函数的执行时间是非常实用的。

 
#include <boost/timer.hpp>
void PrintUserTime()
{
    boost::timer t;  //定义一个计时类,开始计时
    std::cout << "可度量的最大时间:" << t.elapsed_max()/3600 << "h" << std::endl;
    std::cout << "可度量的最大时间:" << t.elapsed_min() << "s" << std::endl;
    std::cout << "使用时间为:" <<  t.elapsed() << std::endl;
}

二、获取当前日期

date d(day_clock::local_day());

三、将字符串转换成日期

date fmtdt1 = from_string("2013-04-21");
date fmtdt2 = date_from_iso_string("20140320");
date fmtdt3 = from_us_string("1-25-2003")

四、日期转换成字符串

to_iso_string
to_simple_string

五、日期长度,以天为单位

date_duration dur = end - beg;
cout << dur.days() << endl;

六、日期区间

接收两个时间点,用于判断时间区间的交集、并集、间隔、区间平移等关于区间的操作

date_period p(beg, end);

七、日期运算

提供days、months、years三个时间类,可与日期类进行混合运算

months m(1);
date end = d + m;

八、日期、日期与字符串转换、日期加减运算

#include <boost/date_time/gregorian/gregorian.hpp>
void PrintDate()
{
    using namespace boost::gregorian;
    using namespace std;
    //获取当前时间
    date d(day_clock::local_day());
    //日期类支持IO流输出
    cout << d << endl;

    //将日期转换成字符串  20140320
    cout << to_iso_string(d) << endl;

    //将字符串中转换成日期
    date fmtdt1 = from_string("2013-04-21");
    date fmtdt2 = from_string("2013/04/21");
    cout << fmtdt1 << " " << fmtdt2 << endl;

    //日期的运算,
    days day(1);
    months m(1);
    years y(1);
    date beg = d + day - y;
    date end = d + m;
    cout << (beg < end ? "Yes" : "No") << endl;

    //特别地, date - date = date_duration , 同时也支持date +/- date_duration
    //日期长度
    date_duration dur = end - beg;
    cout << dur.days() << endl;
    //日期区间
    date_period p(beg, dur);
    cout << p << endl;
}

九、时间、时间与字符串转换、时间加减运算

和日期大同小异,也提供时间长度:time_duration,时间区间:time_period,及时间操作类hours、minutes、seconds、milliseconds、microseconds

#include <boost/date_time/posix_time/posix_time.hpp>
void PrintTime()
{
    using namespace boost::posix_time;
    using namespace std;
    using namespace boost::gregorian;

    //获取本地时间
    ptime t1(second_clock::local_time());
    //获取UTC时间
    ptime t2(second_clock::universal_time());
    cout << t1 << t2 << endl;

    //时间8:30
    time_duration dur(8,30,0);
    hours h(1);
    minutes m(1);
    seconds s(1);
    milliseconds mi(1);   //毫秒
    microseconds mic(1);  //微秒
    //nanoseconds na(1);    //纳秒   需要系统的支持
    ptime t3(date(2013,4,20));
    ptime t4(date(2013,4,20), dur);
    ptime t5(date(2013,4,20), mic);
    cout << to_simple_string(t3) <<" " <<  to_simple_string(t5) << endl;

    //时间的运算,与日期差不多,非常简单
    cout << t2 - t1 << endl;
}

十、格式化时间

主要用来两个类,输入:date_input_facet, 输出:date_facet 
时间格式化类为:time_input_facet   time_facet  boost::posix_time::time_facet *timeFmt = new boost::posix_time::time_facet("%Y-%m-%d %H:%M:%S");

#include <boost/date_time/gregorian/gregorian.hpp>
void FormatDateTime()
{
    using namespace boost::gregorian;
    using namespace std;

    //输入
    date d;
    std::string teststring = "140320";
    boost::gregorian::date_input_facet *fmt = new boost::gregorian::date_input_facet("%y%m%d");
    std::stringstream ss1(teststring);
    ss1.imbue(locale(ss1.getloc(), fmt));
    ss1 >> d;
    cout << d << endl;
    //输出
    boost::gregorian::date d2(2009, 1, 7);
    boost::gregorian::date_facet *fmt2 = new boost::gregorian::date_facet("%A, %d %B %Y");
    std::cout.imbue(std::locale(std::cout.getloc(), fmt2));
    std::cout << d2 << std::endl;

    //定制
    std::locale::global(std::locale("German"));
    std::string months[12] = { "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" };
    std::string weekdays[7] = { "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" };
    boost::gregorian::date d3(2009, 1, 7);
    boost::gregorian::date_facet *df = new boost::gregorian::date_facet("%A, %d. %B %Y");
    df->long_month_names(std::vector<std::string>(months, months + 12));
    df->long_weekday_names(std::vector<std::string>(weekdays, weekdays + 7));
    std::cout.imbue(std::locale(std::cout.getloc(), df));
    std::cout << d3 << std::endl;
}

(一)boost库之日期、时间的更多相关文章

  1. Python学习笔记9:标准库之日期时间(time包,datetime包)

    一 time包 sleep([float time]) 延迟一段以浮点数表示的秒数 time包基于C语言的库函数(library functions). Python的解释器一般是用C编写的,Pyth ...

  2. 【Boost】boost库获取格式化时间

    获取时间方式 格式一:YYYYMMDD #include<iostream> #include<string> #include<boost/date_time/greg ...

  3. Java 8——日期时间工具库(java&period;time)

    一.前言 在介绍Java SE 8中新的日期时间库前,先了解下Java 8之前的日期时间工具的诟病. 在Java SE 8前,日期时间工具库在java.util包中,包括: java.util.Dat ...

  4. C语言日期时间标准库

    用思维导图整理: 代码: #include <stdio.h> #include <time.h> #include <string.h> int main() { ...

  5. js非常强大的日历控件fullcalendar&period;js&comma; 日期时间库&colon; moment&period;js

    日历控件: https://fullcalendar.io/docs/ https://fullcalendar.io/docs/event_data/events_function/ https:/ ...

  6. JDK1&period;8日期时间库学习

    这周在阅读<阿里巴巴Java开发手册>时,在并发处理一节的日期处理中,其强调SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果 定义为 stati ...

  7. Python中处理日期时间库的使用方法(转载)

    <本文来自公众号“大邓带你玩python”,转载> 用百分之20时间,学会解决百分之80的问题. 常用的库有time.datetime.其中datetime库是对time库的封装,所以使用 ...

  8. 程序员常用6 个 Python 的日期时间库

    内建的 datetime 模块 在跳转到其他库之前,让我们回顾一下如何使用 datetime 模块将日期字符串转换为 Python datetime 对象. 假设我们从 API 接受到一个日期字符串, ...

  9. Java8新特性探索之新日期时间库

    一.为什么引入新的日期时间库 Java对日期,日历及时间的处理一直以来都饱受诟病,尤其是它决定将java.util.Date定义为可修改的以及将SimpleDateFormat实现成非线程安全的. 关 ...

随机推荐

  1. Java&colon;批量插入、修改数据到数据库中的用法

    在java中使用JDBC实现批处理的对象一般是使用PrepareStatement对象. 如何使用: Class.forName("Oracle.jdbc.driver.OracleDriv ...

  2. 20个超实用的JavaScript技巧及最佳实践

    1.第一次给变量赋值时,别忘记var关键字   给一个未声明的变量赋值,该变量会被自动创建为全局变量,在JS开发中,应该避免使用全局变量.   2.使用===替换==   并且永远不要使用=或!=. ...

  3. Hadoop on Mac with IntelliJ IDEA - 10 陆喜恒&period; Hadoop实战(第2版)6&period;4&period;1(Shuffle和排序)Map端 内容整理

    下午对着源码看陆喜恒. Hadoop实战(第2版)6.4.1  (Shuffle和排序)Map端,发现与Hadoop 1.2.1的源码有些出入.下面作个简单的记录,方便起见,引用自书本的语句都用斜体表 ...

  4. &lbrack;Leetcode&rsqb; Longest Consecutive Sequence 略详细 &lpar;Java&rpar;

    题目参见这里 https://leetcode.com/problems/longest-consecutive-sequence/ 这个题目我感觉很难,看了半天别人写的答案,才明白个所以然.下面的代 ...

  5. WKWebView与Js交互

    首先打开webstorm,将最下面h5拷贝到html中.然后导入工程 #define kMessageHandlerName @"mymobile" 1.创建配置类 - (WKWe ...

  6. 想要快速上手 Spring Boot?看这些教程就足够了!

    1.项目名称:分布式敏捷开发系统架构 项目简介:基于 Spring + SpringMVC + Mybatis 分布式敏捷开发系统架构,提供整套公共微服务服务模块:集中权限管理(单点登录).内容管理. ...

  7. &lbrack;PA2014&rsqb;Bazarek

    [PA2014]Bazarek 题目大意: 有\(n(n\le10^6)\)件商品,\(m(m\le10^6)\)次询问.每次询问若选出其中的\(k\)个,要求它们的总价为奇数,求最大可能的总价. 思 ...

  8. 2019&sol;4&sol;11 wen 常用类2

  9. NBU 还原LINUX ORACLE 数据库&lpar;EHR&rpar;

    一.E-HR数据库(全备)恢复 目录 一.E-HR数据库(全备)恢复... 1 1. 使用bplist 命令读取备份文件... 1 2. 启动到nomount状态... 2 3. 利用rman还原控制 ...

  10. 基于TrueLicense实现产品License验证功能

    受朋友所托,需要给产品加上License验证功能,进行试用期授权,在试用期过后,产品不再可用. 通过研究调查,可以利用Truelicense开源框架实现,下面分享一下如何利用Truelicense实现 ...