格式化 posix 时间,仅包含 3 位小数秒数

2023-12-02

相当于什么microsec_clock以下代码中的毫秒数?

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

int main()
{
    boost::posix_time::ptime date_time = boost::posix_time::microsec_clock::local_time();
    const std::string str_time = boost::posix_time::to_simple_string(date_time);
    std::cout << str_time << std::endl;
    return 0;
}

输出:2015 年 1 月 25 日 16:26:14.932738

我需要以下输出:

输出:2015 年 1 月 25 日 16:26:14.932


事实上,这似乎是图书馆的一个奇怪的遗漏。

话又说回来,看起来并不是这样strftime有货:http://en.cppreference.com/w/cpp/chrono/c/strftime

那么,需要什么来修补time_facet实现得到这个?这是patch反对boost 1.57boost::date_time::time_facet.hpp (applied).

1d0
< 
39a39
>       static const char_type fractional_seconds_3digits[3];              // 3
72a73,76
>   time_formats<CharT>::fractional_seconds_3digits[3] = {'%','3'};
> 
>   template <class CharT>
>   const typename time_formats<CharT>::char_type
215a220
>     static const char_type* fractional_seconds_3digits;               // %3
397a403,411
>       if (local_format.find(fractional_seconds_3digits) != string_type::npos) {
>         // replace %3 with nnn
>         if (frac_str.empty()) {
>           frac_str = fractional_seconds_as_3digit_string(time_arg.time_of_day(), false);
>         }
>         boost::algorithm::replace_all(local_format,
>                                       fractional_seconds_3digits,
>                                       frac_str);
>       }
506a521,529
>       if (format.find(fractional_seconds_3digits) != string_type::npos) {
>         // replace %3 with nnn
>         if (frac_str.empty()) {
>           frac_str = fractional_seconds_as_3digit_string(time_dur_arg, false);
>         }
>         boost::algorithm::replace_all(format,
>                                       fractional_seconds_3digits,
>                                       frac_str);
>       }
550a574,592
>     fractional_seconds_as_3digit_string(const time_duration_type& time_arg,
>                                  bool null_when_zero)
>     {
>       typename time_duration_type::fractional_seconds_type frac_sec =
>         time_arg.fractional_seconds();
> 
>       for (auto n = time_arg.num_fractional_digits(); n>3; --n)
>           frac_sec /= 10;
> 
>       if (null_when_zero && (frac_sec == 0)) {
>         return string_type();
>       }
> 
>       //make sure there is no sign
>       return integral_as_string(date_time::absolute_value(frac_sec), 3);
>     }
> 
>     static
>     string_type
599a642,645
> 
>   template <class time_type, class CharT, class OutItrT>
>   const typename time_facet<time_type, CharT, OutItrT>::char_type*
>   time_facet<time_type, CharT, OutItrT>::fractional_seconds_3digits = time_formats<CharT>::fractional_seconds_3digits;

现在你可以使用 Boost DateTime 的time_facet for ptimes:

#include "time_facet.hpp"
#include <boost/date_time/posix_time/posix_time.hpp>

int main()
{
    using namespace boost::posix_time;
    ptime const date_time = microsec_clock::local_time();

    std::cout << date_time << std::endl;

    auto facet = new time_facet("%Y-%b-%d %H:%M:%S.%f %z");
    std::cout.imbue(std::locale(std::cout.getloc(), facet));
    std::cout << date_time << std::endl;

    facet = new time_facet("%Y-%b-%d %H:%M:%S.%3 %z");
    std::cout.imbue(std::locale(std::cout.getloc(), facet));
    std::cout << date_time << std::endl;
}

哪个打印

2015-Jan-25 22:32:30.392108
2015-Jan-25 22:32:30.392108
2015-Jan-25 22:32:30.392

现在这是一个粗糙的补丁,只是为了展示如果您要添加它,您需要完成什么。相关的改进似乎是:

  • 支持允许小数秒内有不同位数的格式字符串
  • 使用适当的舍入(而不是截断,现在会发生什么)

我希望这个示例有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

格式化 posix 时间,仅包含 3 位小数秒数 的相关文章

随机推荐

  • JOIN 查询的 Php pdo 结果

    我的问题是 我尝试在两个表之间进行简单的 JOIN 这两个表都有 id 字段 我的结果是一个 stdClass 对象 因为我使用 PDO 有谁知道如何区分第一个表的 id 和第二个表的 id Code sql SELECT FROM pro
  • Swift 中的 CLGeocoder - 使用verseGeocodeLocation 时无法返回字符串

    我正在尝试使用 CLGeocoder 返回字符串中坐标的位置 我的代码目前如下所示 func getPlaceName latitude Double longitude Double gt String let coordinates C
  • Firebase 身份验证电子邮件自定义

    我在我的应用程序中使用 firebase auth 并且正在设置无密码电子邮件注册 我已设法从自己的域设置电子邮件 但如何更改电子邮件中发送的魔术链接文本 我可以看到其他模板电子邮件的配置 但看不到这封电子邮件的配置 有问题的电子邮件是这样
  • 获取所有行都为 true 的 id (sqlalchemy)

    我试图找到一种简单的方法来查找特定的表单或表单 其中所有项目都带有form id是活跃的 这是我的Messages table class Messages db Model tablename Messages id db Column
  • 在 Swift 中,如何避免可选值和 nil 对象引用?

    选项的全部原因是为了防止由于命中分配给 nil null none 的变量而导致运行时崩溃 因此 变量不能为nil 相反 它们可以包装在将它们表示为 Some 或 None 的可选类型中 并展开以获取 Some 或 nil 的特定内容 但如
  • VBA隐藏用户表单但保留输入的数据

    我带着我希望是一个相当简单的问题再次回来 我正在尝试在 VBA 中创建用户表单 用户将在表单中输入某些信息 然后关闭表单 我希望用户表单在用户关闭后保留输入的数据 我将它视为一个类模块 因为从技术上讲它们是 或者至少我是这么理解的 这是我正
  • AWS EC2 Angular 5 ng服务不通过浏览器连接

    我设法让我的 Angular 5 应用程序在 AWS EC2 Ubuntu 上运行 启动标准Ubuntu实例 使用PuTTy加壳 安装节点 进入接下来的4条 魔线 mkdir npm global npm config set prefix
  • 具有可变结尾整数的 For 循环

    我有一个包含 40 000 行数据的数据集 我的代码设置为检查第 n 1 行中的日期是否比第 n 行中的日期晚 1 天 如果第 n 行和第 n 1 行中的日期不按正常时间顺序排列 则会添加包含该日期的空白数据的行 我的问题是 因为我在添加行
  • Selenium / java:如何获取总页长度

    使用 Selenium Java 绑定 我正在尝试编写一个简短的模块 它将截取浏览器页面的完整屏幕截图 我知道AShot存在 但没有维护 并且对我来说有一些问题 作为其中的一部分 我想知道我正在处理的整页长度是多少 这样我就可以计算出需要拍
  • 如何在 r markdown 中指定自定义纸张尺寸

    我正在使用 R Markdown 制作一本具有特定高度和长度测量值的小册子 有没有办法指定 R Markdown 以 5 5 x8 5 尺寸生成文章 我看到有关制作 A4 尺寸 pdf 的问题here但这并没有帮助 因为我的措施非常具体 使
  • Java JScrollPane - 多个组件

    我正在尝试在 JScrollPane 中添加 2 个图像 第一个图像是背景 第二个图像与第一个图像重叠 当我运行程序时 问题仅显示第二张图像 请帮忙 ImageIcon ii new ImageIcon mini map png JLabe
  • “一个实体对象不能被 IEntityChangeTracker 的多个实例引用。”

    我使用 MYSql 服务器作为 Windows 窗体应用程序背后的数据库 我的数据库中有两个模式 我必须将条目放入其中 我创建了两个上下文对象 每个对象对应一个模式 当我使用 schema1 上的 contextA 时 所有条目都完美完成
  • 如何将双引号或单引号或不带引号与正则表达式匹配?

    我试图从所有三种类型的输入中获取一些文本 但无法弄清楚如何处理未引用的情况 到目前为止我有 name Input name sometext name sometext name sometext 看起来您是一名 C 开发人员 因此您可以使
  • 安装 Pillow(和 PIL)时出错

    如果我使用命令sudo pip install Pillow 它运行良好 直到清理阶段 这是日志文件中的完整错误消息 clang error unknown argument mno fused madd Wunused command l
  • Apple APP Store 上启用 Bitcode 的移动应用程序大小

    我是新人 尝试在 App Store 上发布我的第一个应用程序 我已经制作了这个应用程序统一 5 6 我面临的问题是生成的存档的大小Xcode 8 3 我必须在 App Store 上上传 它超过 100 MB 而 Play 商店上的同一个
  • 在 Android 中复制 Apple 的搜索

    我想创建一个类似于此处所示的 UIhttp appsreviews com wp content uploads 2010 08 Cures A Z App for iPhone jpg 我开始尝试将两个自定义列表并排放置 就像在这段代码中
  • 将日期时间打印为 pytz.timezone("Etc/GMT-5") 会产生不正确的结果

    考虑以下示例 其中我采用一个简单的日期时间 使其能够识别 UTC 时区 然后转换为 UTC 5 d1 datetime datetime 2019 3 7 7 45 d2 pytz utc localize d1 print f UTC d
  • 如何使用 JFreeChart 创建条形图,通过可见的提示缩短太长的条形图?

    我想创建一个条形图 但是应该缩短非常高的值 下图就是一个例子 source epa gov 我希望我想要的很清楚 我的问题是 我怎样才能做到这一点自由图表 如果 JFreeChart 无法实现 您可以推荐替代的开源 Java 库来生成此类输
  • pandas 按周分组

    我有这个数据框 Name Date Quantity Apple 07 11 17 20 orange 07 14 17 20 Apple 07 14 17 70 Orange 07 25 17 40 Apple 07 20 17 30 我
  • 格式化 posix 时间,仅包含 3 位小数秒数

    相当于什么microsec clock以下代码中的毫秒数 include