【问题标题】:What is the best way to represent intraday time HH:MM:SS in c++11在c ++ 11中表示日内时间HH:MM:SS的最佳方法是什么
【发布时间】:2018-06-24 07:53:21
【问题描述】:

C++11 chrono 提供了一些概念:clocktime_pointdurationHoward Hinnant's date.h library 中还有额外的函数来操作日期和时间 with motivating examples/reciepes。但是我很难表达一般的时间点,比如十点。 一般日内时间点是否应表示

  • 持续时间:今天 + 持续时间
  • 创建自定义时钟选择任何给定日期的纪元,即:今天
  • ????

在 C++11 中,以 HH:MM:SS 格式获得一般盘中时间的良好表示的最佳方法是什么?

seq = [2018-01-01 09:29:00UTC, 2018-01-01 09:29:58UTC,..., 2018-01-01 09:35:00UTC, ..., 2018-01-01 16:29:00UTC, 2018-01-01 16:30:00UTC]
for time in seq
    time > "09:30:00" and time < "16:00:00" do some work;

【问题讨论】:

  • 也许是从午夜开始经过的秒数?最好的方法是什么?这个问题有点不清楚。
  • 什么时区?世界标准时间?计算机当前的本地时区?其他特定时区?
  • 您正在为“持续时间”投票。这个问题不清楚,因为我无法概念化它。你看我可以用给定一天的纪元午夜制作一个自定义时钟,所以现在 10 点钟确实是一个时间点,或者你可以从午夜开始计数,然后你就有了“持续时间”。当然,也可以将每个一般时间点与 unix epoch 进行比较,并将其与特定时间点进行比较时,将后者向下倾斜。这更有意义吗?还是根本没有?
  • @HowardHinnant 是的,完全正确!本地时区更可取。您是否希望将其表示为 custom_clock |持续时间 | ??? .目标是能够在其他 time_points 与 system_clock | 之间进行比较。 UTC 时钟 |本地时钟 | ...因此可以通过设置包含/排除对具有时间字段的数据流进行分区。

标签: c++ date c++11 time chrono


【解决方案1】:

使用Howard Hinnant's date/time library,今天当地时间上午 10 点是:

#include "date/tz.h"
#include <iostream>

int
main()
{
    using namespace date;
    using namespace std::chrono;
    auto zt = make_zoned(current_zone(), local_days{2018_y/jan/15} + 10h);
    std::cout << zt << '\n';
}

这只是为我输出:

2018-01-15 10:00:00 EST

local_days 用于将年/月/日转换为local_time,精度为days。您可以使用任何您想要的单位向其中添加任何chrono::duration。然后,您可以将 local_time 与您想要在该 time_zone 中获取当地时间的任何 time_zone 配对。

【讨论】:

  • The proposal was approved by LEWG and forwarded to LWG with the recommendation of targeting C++20 at the Albuquerque, NM meeting in Nov. 2017 niceee!
猜你喜欢
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
相关资源
最近更新 更多