本文首发于个人博客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

  • %f

    Fractional seconds are always used, even when their value is zero

    "13:15:16.000000"

  • %F *

    Fractional seconds are used only when their value is not zero.

    "13:15:16"

    "05:04:03.001234"

to string

The Boost.Date_Time library provides the following ptime to std::string conversions within the boost::posix_time namespace:

  • std::string to_simple_string(ptime) returns a string in the form of YYYY-mmm-DD HH:MM:SS.fffffffff format where mmm is the three character month name.
  • std::string to_iso_string(ptime) returns a string in the form of YYYYMMDDTHHMMSS,fffffffff where T is the date-time separator.
  • std::string to_iso_extended_string(ptime) returns a string in the form of YYYY-MM-DDTHH:MM:SS,fffffffff where T is the date-time separator.

date_time.cpp

#include <iostream>
#include <sstream>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
using namespace std;
using namespace boost::posix_time;
using namespace boost::gregorian; /*
second millisecond microsecond nanosecond Format Flags
%f
Fractional seconds are always used, even when their value is zero
"13:15:16.000000" %F *
Fractional seconds are used only when their value is not zero.
"13:15:16"
"05:04:03.001234"
*/ std::string ptime_2_str_name(boost::posix_time::ptime now)
{
// https://stackoverflow.com/questions/5018188/how-to-format-a-datetime-to-string-using-boost
// for multiple use std::stringstream ss;
//static std::locale loc(std::cout.getloc(), new time_facet("%Y%m%d_%H%M%S_%f"));
static std::locale loc(ss.getloc(), new time_facet("%Y%m%d_%H%M%S_%f"));
ss.imbue(loc);
ss << now;
return ss.str(); // 20180118_111501_208797
} std::string str_name_2_iso_format(std::string str_name)
{
/*
20180118_111501_208797 ===> 20180118T111501.208797===>from_iso_string===>ptime
*/
//std::cout << "time length: " << str_ptime.length() << endl; //22
size_t first_pos = str_name.find_first_of('_');
size_t second_pos = str_name.find_last_of('_');
str_name[first_pos] = 'T';
str_name[second_pos] = '.';
return str_name;
} ptime from_name_string(std::string str_ptime)
{
std::string str_iso_ptime = str_name_2_iso_format(str_ptime);
return from_iso_string(str_iso_ptime);
} int main()
{
ptime p1(date(2001, 1, 1), hours(1));
ptime p2 = time_from_string("2002-2-2 02:00:00.999888"); // fraction part: 6 bits
ptime p3 = from_iso_string("20030303T031233.777666"); // fraction part: 6 bits
ptime p4 = second_clock::local_time(); // in second
ptime p5 = microsec_clock::universal_time(); // UTC World time in millisecond,microsecond
ptime p6 = microsec_clock::local_time(); // UTC local time in millisecond,microsecond cout << p1 << endl
<< p2 << endl
<< p3 << endl
<< p4 << endl
<< p5 << endl
<< p6 << endl << endl; /*
* date()
* time_of_day()
*/
date d = p1.date();
time_duration td = p1.time_of_day();
cout << d << ", " << td << endl << endl; cout << to_simple_string(p2) << endl //YYYY-mmm-DD HH:MM:SS.ffffff
<< to_iso_string(p2) << endl //YYYYMMDDTHHMMSS,ffffff
<< to_iso_extended_string(p2) << endl; //YYYY-MM-DDTHH:MM:SS,ffffff cout << "User defined format time:" << endl;
std::string str_name = ptime_2_str_name(p6);
ptime p7 = from_name_string(str_name);
cout <<" p6: "<< ptime_2_str_name(p6) << endl;
cout <<"p7 from String2Ptime(p6): "<< ptime_2_str_name(p7) << endl; return 0;
}

CMakeLists.txt

# Specify the minimum version for CMake
cmake_minimum_required(VERSION 2.8) # Project's name
project(date_time) # Set the output folder where your program will be created
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}) #find_package(Boost 1.5.8 REQUIRED COMPONENTS date_time system filesystem iostreams)
find_package(Boost 1.5.8 REQUIRED COMPONENTS date_time)
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS}) # The following folder will be included
include_directories("${PROJECT_SOURCE_DIR}") add_executable(date_time ${PROJECT_SOURCE_DIR}/date_time.cpp)
target_link_libraries(date_time ${Boost_LIBRARIES})

run and output

compile program and run

mkdir build
cd build
cmake ..
make cd bin
./date_time

output

2001-Jan-01 01:00:00
2002-Feb-02 02:00:00.999888
2003-Mar-03 03:12:33.777666
2018-Jan-18 15:20:47
2018-Jan-18 07:20:47.815415
2018-Jan-18 15:20:47.815419 2001-Jan-01, 01:00:00 2002-Feb-02 02:00:00.999888
20020202T020000.999888
2002-02-02T02:00:00.999888
User defined format time:
p6: 20180118_152047_815419
p7 from String2Ptime(p6): 20180118_152047_815419

Reference

History

  • 20180118: created.

Copyright

使用boost data_time模块来获取毫秒级时间并转换为string字符串的更多相关文章

  1. 在Windows及Linux下获取毫秒级运行时间的方法

    在Windows下获取毫秒级运行时间的方法 头文件:<Windows.h> 函数原型: /*获取时钟频率,保存在结构LARGE_INTEGER中***/ WINBASEAPI BOOL W ...

  2. GetSystemTime API可以得到毫秒级时间

    用Now返回的日期格式中年只有2位,即2000年显示为00, 这似乎不太令人满意. 此外Now和Time都只能获得精确到秒的时间,为了得到更精确的毫秒级时间,可以使用API函数GetSystemTim ...

  3. Linux下得到毫秒级时间--C语言实现(转-度娘818)

    Linux下得到毫秒级时间--C语言实现 原文链接: http://www.cnblogs.com/nwf5d/archive/2011/06/03/2071247.html #ifdef HAVE_ ...

  4. C++获取毫秒级时间戳

    #include<chrono>   auto timeNow = chrono::duration_cast<chrono::milliseconds>(chrono::sy ...

  5. java/python中获取当前系统时间,并与字符串相互转换格式,或者转化成秒数,天数等整数

    java转换成秒数 Date类有一个getTime()可以换回秒数,例如: public class DateToSecond { public static void main(String[] a ...

  6. c++ 中 毫秒级时间获取

    #include <time.h> clock_t start,ends; start=clock(); Sleep(); ends=clock(); cout<<ends-s ...

  7. Delphi获取毫秒级时间戳

    function GetJavaTime( d: TDateTime ): Int64; var dJavaStart: TDateTime; begin //java里的时间是从1970年1月1日0 ...

  8. QT 获取当前毫秒级时间缀

    long long currentTime = QDateTime::currentDateTime().toMSecsSinceEpoch();

  9. C++计时器:毫秒级和微秒级

    1.毫秒级 使用GetTickCount()获取系统启动所经过的毫秒数 #include<iostream> using namespace std; int main(){ DWORD ...

随机推荐

  1. ESP8266开发之旅 网络篇① 认识一下Arduino Core For ESP8266

        博主的 ESP8266开发之旅 专栏主要分为三个部分: 基础篇 网络篇 应用篇     从这一篇开始,博主将会带领各位读者在基础篇的基础上进入网络的世界.在此,博主认为各位读者已经具备以下前提 ...

  2. ESP8266开发之旅 网络篇③ Soft-AP——ESP8266WiFiAP库的使用

    1. 前言     在前面的篇章中,博主给大家讲解了ESP8266的软硬件配置以及基本功能使用,目的就是想让大家有个初步认识.并且,博主一直重点强调 ESP8266 WiFi模块有三种工作模式: St ...

  3. webStrom快捷键快速创建React组件

    1. rcc + tab键 - - 用ES6模块系统创建一个React组件类 2. rccp + tab键 - - 创建一个带有PropTypes和ES6模块系统的React组件类 3. rcfc + ...

  4. 身为一个 CS专业的留学生,你还在为堆积如山的编程assignment而发愁吗?

    每个人都渴望圆梦,当我们看见梦想在别人身上实现时,总在抱怨幸运之神为何不眷顾自己:其实更多的时候,梦想就在你身边的不远处,只要你迈出正确的步伐. 记得刚入大学时,意气风发.我以全班前几名的优异成绩考入 ...

  5. day07整理(内置方法\循环判断)

    目录 一.上节课回顾 (一)if判断 1.单分支结构 2.双分支结构 3.多分支结构 (二)for循环 1.for + break 2.for + continue 3.for循环嵌套 (三)robu ...

  6. 设计模式(十三)Visitor模式

    Visitor模式可以用来把数据结构与处理分离开.通俗来说就是编写一个访问者类来访问数据结构中的元素,并把对各元素的处理交给访问者类.这样,当需要增加新的处理时,只需要编写新的访问者,然后让数据结构可 ...

  7. Redis(六)复制

    在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等需求.Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis副本.复制功能是高可用R ...

  8. vue订阅者模式

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. MongoDB分页查询优化方法

    在网上看到很多关于MongoDB分页查询优化的文章,如出一辙.笔者自己实际生产中也遇到此问题,所以看了很多篇文章,这里分享一篇简明扼要的文章分享给大家,希望对大家在使用MongoDB时有所帮助. 凡事 ...

  10. deepin15.7挂载/home到单独的分区:

    1.首先打开Gpart分区编辑器,找一个空闲的分区,调整好分区大小,格式化成ext4格式. 具体步骤为首先unmount所用到的盘,然后右击该盘选择'format to ext4',最后点击apply ...