boost Data & Time 笔记

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

从时间戳开始

概念

时间戳(timestamp),通常是一个(long数字转化的)字符序列,唯一地标识某一刻的时间。

具体的说, 时间戳对应的数字, 是 从 0时区 ( 英国格林威治天文台对应的经线 ) 的 1970年1月1日 0 点 0 分 0 秒 开始, 到产生时间戳的时刻的总秒数。

重要的事情说 3 遍 : 地球上任何时区任何地点在同一个时刻取到的时间戳是相同的。
重要的事情说 3 遍 : 地球上任何时区任何地点在同一个时刻取到的时间戳是相同的。
重要的事情说 3 遍 : 地球上任何时区任何地点在同一个时刻取到的时间戳是相同的。

小测试

问题 :
一小时有3600 秒。 那么在我穿越到北京时间什么时候可以取到时间戳为 3600 ? 什么时候能取到时间戳 0 ?

答案 :
北京时间 1970/1/1 9:0:0 取到时间戳 3600
北京时间 1970/1/1 8:0:0 取到时间戳 0

Boost Data & Time

boost基于公历(儒略历)和 POSIX 时间规范编写了boost::gregorian 和boost::posix_time 两部分代码。

以及以上的时间概念( 周 、 月 、 年 ) 属于Data* , 之下的概念(小时 、 分 、 秒、 毫秒 。。。 )属于Time*

良心工具站 :

http://tool.chinaz.com/Tools/unixtime.aspx

对时间的更精确描述方法

这里请先把相对论的知识忘记,想象时间的长河是x轴,我们所在的时间线是一条沿着x轴匀速延长的贪吃蛇, 蛇头所在就是此刻,蛇的身子都是历史。
另,此处只讨论如何在地球上描述时间, 如果您知道半人马星系的时间描述方式,请通知我。

时刻 

某时某刻。
时间长河(x轴)上的一个点。具有唯一性。 没有长度值 。
比如 : 1970/1/1 0:0:0 。 生活中我经常这样表示唯一时刻,但是那是因为我从未离开东八区的掌控。想要精确的表示时刻,需要再加上时区 :
1970/1/1 0:0:0 UTC == (timestamp) 0

> boost::gregorian::date // 到某天
> boost::posix_time::ptime  // 时刻

时间段

一段时间。
时间长河(x轴)上的 … 啥也不是 。 是个平行于时间长河(x轴)的向量, 不具有唯一性, 有长度。

比如一天, 比如1秒。

> boost::gregorian::data_duration
> boost::gregorian::months
> boost::gregorian::years
> boost::gregorian::weeks
>
> boost::poxis_time::hours
> boost::poxis_time::minutes
> boost::poxis_time::seconds
> boost::poxis_time::microseconds
> boost::poxis_time::nanoseconds

时期

从某时刻到某时刻。
时间长河(x轴)上的一段线段, 具有唯一性, 有长度。

比如 1970/1/1 0:0:0 UTC 到 1970/1/2 0:0:0 UTC 。 长度是1天。

> boost::gregorian::data_period
> boost::poxis_time::time_period 

时间迭代器

给定一个时刻和步长, 则按照步长向前(++)/后(–) 遍历时刻。

> boost::gregorian::date_iterator //纯虚
> boost::gregorian::day_iterator
> boost::gregorian::week_iterator
> boost::gregorian::month_iterator
> boost::gregorian::year_iterator
> 
> boost::poxis_time::time_iterator

功能简述

与字符串的交互

  • 时刻
    • 时刻支持由字符串构造
      • 2002/1/25
      • 20020125
      • 2002-01-20 23:59:59.000
      • 20020131T235959
    • 时刻可以转换为字符串
         to_simple_string             //2002-Jan-01 10:00:01.123456789
         to_iso_string                //20020131T100001,123456789
         to_iso_extended_string       //2002-01-31T10:00:01,123456789
  • 时间段 ( 仅time_duration)
         to_simple_string             //2002-Jan-01 10:00:01.123456789
         to_iso_string                //20020131T100001,123456789
  • 时期
     to_iso_string                    //[2002-Jan-01/2002-Jan-31] 
               // [2002-Jan-01 01:25:10.000000001/ 2002-Jan-31 01:25:10.123456789]

和C的交互

tm to_tm(date)
date date_from_tm(tm datetm)

tm to_tm(ptime)
ptime ptime_from_tm(tm timetm)

tm to_tm(time_duration)
ptime from_time_t(std::time_t)

基本运算 :

  • 时刻 +- 时间段 = 时刻
  • 时刻 +- 时刻 = 时间段

  • 时刻之间可以依照时刻先后比较 ( “` < 、> 、 <= 、 >= 、 == 、 !=)

  • 时间段之间可以依照时间长短比较 ( 。。。 )
时期功能
  • 可以查询时刻与时期的关系 ( 之前 , 之后 , 位于 。。。 )
  • 时期之间可以合并,串联, 。。。。

时间查询

boost::posix_time::ptime now = boost::posix_time::second_clock::local_time(); // 精确到秒

boost::gregorian::date d(boost::gregorian::day_clock::local_day()); //  今天
typedef boost::date_time::c_local_adjustor<ptime> local_adj;
boost::posix_time::ptime utc_now = local_adj::utc_to_local(now); // UTC 时区

boost::posix::ptime zero= boost::posix_time::from_time_t(time(0)); // UTC 1970/1/1 0:0:0
// 如果使用 东八区的ptime - UTC的ptime获得的秒数是时间戳 + 3600×8
long timestamp = (utc_now - zero).total_seconds() ;// 时间戳

特色接口

提供比如 是否闰年 , 是否闰秒 , 这个月有几天之类的各种有规范可依据的接口。

http://www.boost.org/doc/libs/1_58_0/doc/html/date_time/gregorian.html
http://www.boost.org/doc/libs/1_58_0/doc/html/date_time/posix_time.html

Boost 之date date是boost库中date_time库中处理日期的核心类,它使用32位的整数作为内部存储,以天为单位表示时间点的概念。 要想在vs中使用date类,我们需要引用date类的头文件,引用方式: #include using namespace boost::gregorian; 至于date类的内部代码我就不贴出来了,大家可以自己去看下,也不多。 既然我们导入了头文件,也指定了对 阅读详情

相关推荐

使用boost data_time模块来获取毫秒级时间并转换为string字符串

本文首发于个人博客https://kezunlin.me/post/107cbcbb/,欢迎阅读! using boost.date_time to get time in millisecond microsecond level Guide format flags second millisecond microsecond nanosecond Format Flags %fFract...

KeZunLin's blog 1095

boost::posix_timeboost::date_time杂项的测试程序

boost::posix_timeboost::date_time杂项的测试程序实现功能C++实现代码 实现功能 boost::posix_timeboost::date_time杂项的测试程序 C++实现代码 #include "boost/date_time/wrapping_int.hpp" #include "boost/date_time/posix_time/posix_time_duration.hpp" #include "testfrmwk.hpp" #include &lt;iost

希望我的博客,能帮上你解决学习中工作中所遇到的问题 566

四开关Buck-Boost变换器Simulink建模与闭环控制实战指南

DC-DC变换器作为电力电子系统的核心组件,通过开关器件的周期性通断实现电能的高效转换。其工作原理基于电感储能和电容滤波,通过调节占空比控制输出电压。在工程实践中,变换器的建模与闭环控制技术能够显著提升系统的稳定性和动态响应性能,广泛应用于新能源汽车、光伏发电等场景。针对四开关Buck-Boost变换器这一兼具升降压功能的拓扑结构,MATLAB/Simulink仿真平台为工程师提供了从器件选型到控制策略验证的完整解决方案。通过电压电流双闭环设计,可有效解决实际项目中遇到的纹波异常和切换震荡问题,实现宽范围电

cuililai5127的博客 367

boost 时间库

boost::gregorian::datadata_time库处理日期的核心类,使用32位的

chenkangapple的专栏 607

boost学习笔记(日期date)

date 日期就是所谓的年月日,boost中的date提供了年月日的表示方法。首先我们看下date的创建。需要包含gregorian.hpp头文件。 #include &quot;stdafx.h&quot; #include &amp;lt;iostream&amp;gt; #include &amp;lt;boost\date_time\gregorian\gregorian.hpp&amp;gt; using namespace std...

貌似君子的专栏 2160

c语言毫秒整数转换成字符串,使用boost data_time模块来获取毫秒级时间并转换为string字符串...

using boost.date_time to get time in millisecond microsecond levelGuideformat flagssecond millisecond microsecond nanosecondFormat Flags%fFractional seconds are always used, even when their value is z...

weixin_34410564的博客 1043

boost/thread/pthread/thread_data.hpp:143: undefined reference to `vtable for boost::detail::thread_d

编译出现这样的问题:/home/minbo/git_root/XChat/chat_room/nroom_manager_server/test/../../../common/build/libcommon.a(RabbitmqProducerAsync.cpp.o): In function `boost::detail::thread_data_base::thread_data_base(

幻想之渔 1836

boost初探-日期与时间

文章目录一、前言二、boost基本概念三、日期与时间1.timer2.progress_timer3.data_time库3.1gregorian3.2date_period4.posix_time 一、前言 之前写了两篇关于在linux上安装boost和在Windows上使用boost的文章 在Ubuntu上安装Boost的五种方法(全网最全,建议收藏) boost库在visual studio、DevC++和vscode上的环境配置 下面就该开始使用boost了,boost包含的内容特别多,初学时我

qq_41854911的博客 540

boost::date_time之时间处理

前言: 在日常生活中,关于 日期和时间的处理都很复杂,date_time库有很多工具来简化工作,比如日期、时间迭代器以指定的时间间隔来遍历时间,boost::posix_time库能获取系统当前具体的时间,可以把时间和c语音内置的ts结构体相互转化,根据需要转化时间电脑格式和已经不同初始化时间的方法,boost的date_time库都为我们做了很多。 虽然date_time不能处理1400

qingzai_的专栏 3413

boost学习笔记

目录1 system_time2 多线程2.1 互斥体2.1.1 mutex+scoped_lock2.1.2 try_mutex+scoped_try_lock 1 system_time 获取系统时间: t_start = boost::get_system_time().time_of_day().total_milliseconds(); 延时: boost::thread::sle...

Rareay 788

记录 | ubuntu apt安装boost

记录 | ubuntu apt安装boost

极智视界 917

boost库之date

1.date// date_Exam.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #define BOOST_DATE_TIME_SOURCE #include "libs/date_time/src/gregorian/greg_names.hpp" #

一步一步 3025

Boosttimer到asio:手把手教你用几个经典库提升C++项目效率(附CMake配置)

本文深入解析Boost库中timer、progress_display、date_time和asio四大核心组件的实战应用,帮助C++开发者提升项目效率。通过代码示例展示精准计时、进度显示、复杂日期处理和异步网络编程等高级技巧,并分享现代CMake管理Boost依赖的最佳实践,包括跨平台配置和性能优化方案。

ahhli4007的博客 407

5步搞定Android C++库集成:Boost for Android完全指南

在Android C++开发中,Boost库的强大功能往往因为平台兼容性问题而难以直接使用。Boost for Android项目解决了这一痛点,让你能够在Android应用中无缝集成Boost C++库。这个工具集支持从1.45.0到1.91.0的多个Boost版本,适配不同NDK版本和处理器架构,是Android C++开发者的必备利器。 ## 📱 项目价值与适用场景 Boost for

gitblog_00143的博客 828

boostdata_time处理week_number与标准库的不同之处

首先,星期天的归属问题,在标准库下,星期天的输出是第0天,属于一周的第一天,boost库输出同样是第0天,但是是一周的第7天。     然后,当这一周跨年时,标准库输出会week_number有两种不同的值,第53周和第0周,boost库则会把这周算做新一年的第一周

louvre0321的专栏 289

boost date_time 下 date的使用

通过查看gregrorian目录下可以看到许多关于时间处理的源文件。date_time 库支持无限时间与无效时间等概念。date_time 支持1400-01-01 到9999-12-31之间的日期计算。该库位于命名空间下的grepgorian 中,使用必须包含头文件#include&amp;lt;boost/date_time/gregorian/gregorian.hpp&amp;gt;使用using nam...

m1223853767的博客 517

linux编译使用boost,Boost库的使用和编译

1.boost库有些需要编译,绝大部分不需编译,直接包含源文件即可使用,需要编译的库包括:data_time,regex,program_options,test,thread,system,Python等十五个2.编译bjam:(1)进入boost目录(以boost_1_50_0为例),进入tools\jam\src(2)运行build.bat,编译bjam(3)编译完成后把bjam.exe拷贝...

weixin_39531378的博客 481

C++ STL与Boost库选型指南:资深工程师的实战经验总结

在C++开发中,标准模板库(STL)和Boost库是两大核心工具集,理解它们的定位差异对项目技术选型至关重要。STL作为C++标准的一部分,提供了容器、算法和迭代器等基础组件,具有极佳的可移植性和性能,是构建可靠软件的首选。其设计遵循最小化和正交化原则,确保了代码的稳定性和跨平台一致性。相比之下,Boost库则扮演着前沿试验场的角色,提供了智能指针、文件系统操作和异步I/O等扩展功能,许多特性后来被纳入C++标准。从工程实践角度看,合理选择工具能显著提升开发效率和代码质量。例如,在内存管理场景中,C++11

weixin_33910385的博客 370

boost1.50的thread库无法解析外部符号void __cdecl boost::tss_cleanup_implemented(void) boost、date_time和thread库都编

boost1.50的thread库无法解析外部符号void __cdecl boost::tss_cleanup_implemented(void)boost、date_time和thread库都编译了但使用thread库时没有办法编译!提示:1&amp;gt;BootThread.obj : error LNK2019: 无法解析的外部符号 &quot;void __cdecl boost::tss_cleanu...

zhaodiliu的专栏 1097
上一篇: 让这世界再多一份 GNU m4 教程(终结篇)
下一篇: Base64 编码学习
_RTFSC
博客等级 码龄15年 29粉丝 92原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值