- 主题:设计标准库时间类的人脑子里到底怎么想的?
count()的含义是tick数
https://en.cppreference.com/w/cpp/chrono/duration/count
https://cplusplus.com/reference/chrono/duration/count/
【 在 finlab 的大作中提到: 】
: 因为他们提供的count()看不出什么单位,我还要经常查一下
:
--
FROM 221.218.163.*
如果有夏时制,或跨时区计算时间怎么办?
如在美国的铁路列车时刻表。
所以,基础时间变量只能以格林威治时间为准,以某个时间原点为起点,按一定时间粒度计量的一个整数。所有的时间点都采用这个坐标系计算。最后,转换为你习惯的格式显示出来。
【 在 finlab 的大作中提到: 】
: duration_cast<duration<double, milli>>(endTime - startTime).count())
: 直接加个方法:(endTime - startTime).milli_seconds() 这样不好吗?
: 又不会弄混单位,写起来也简单。
: ...................
--
修改:ylh0315 FROM 221.221.52.*
FROM 221.221.52.*
卧槽 真相了
【 在 mopo 的大作中提到: 】
: 接口过于易用不符合c++设计规范,无法通过review
: --
发自「今日水木 on Android」
--
FROM 114.241.245.*
【 在 ylh0315 的大作中提到: 】
: 如果有夏时制,或跨时区计算时间怎么办?
: 如在美国的铁路列车时刻表。
: 所以,基础时间变量只能以格林威治时间为准,以某个时间原点为起点,按一定时间粒度计量的一个整数。所有的时间点都采用这个坐标系计算。最后,转换为你习惯的格式显示出来。
我觉得其实就是一层抽象, 通过抽象, 屏蔽了不同时钟体系的差异,
最主要的一个差异就是, 闰年和闰秒的存在, 一个简单的例子,2001年减去1998年,
年的粒度下是3, 但是天的粒度下,没有办法直接3*365来得到天数,同理,
由于闰秒的存在, 同样的, 如果间隔是3分钟, 同样不能简单的得到180秒的结论。
闰年取决于使用的日历,那么润秒呢? 取决于所选用的时钟,
这个格林威治的世界时钟, 和滴答不停的原子时钟是不一样的。还有我们C++库里面经常使用UNIX时间,
Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,其实这个也是不考虑闰秒的。
换句话说, 我们回到1970年1月1日, 并开启一个原子时钟计时, 你用原子时钟计时得到的秒数,和调用UNXI时间函数返回来的是不一样的,因此,离开时钟,谈间隔,是会犯错误的。
而这个类库,则帮我们做了这些抽象,是我们不需要理解这么复杂的东西。
当然,现实是, 作为一个C++程序员, 小到一个字符编码, 数字精度表示, 大到一个系统,还都得弄懂。
--
FROM 124.126.3.*
是的。
我是铁路的,时间计算是经常的。就是你说的这个道理。
润秒可以忽略。
但是GPS就不能忽略了。
我们就是使用这样一种时间计算库来计算复杂的时间算法。
【 在 poggy 的大作中提到: 】
:
: 我觉得其实就是一层抽象, 通过抽象, 屏蔽了不同时钟体系的差异,
: 最主要的一个差异就是, 闰年和闰秒的存在, 一个简单的例子,2001年减去1998年,
: ...................
--
FROM 221.218.60.*
这是为了统一风格的
--
FROM 119.161.171.*
主要考虑换算的话,设计合适的DSL最简洁舒适,operator""是这个思路,当然最好的还是类似printf格式串那种。
C++标准库对任意类型组合的接口一致性追求有点过高,就忽略了常用场景的简化性。
自己用量比较大其实可以针对项目常用场景加一些using和辅助函数之类。
【 在 finlab 的大作中提到: 】
: duration_cast<duration<double, milli>>(endTime - startTime).count())
:
: 直接加个方法:(endTime - startTime).milli_seconds() 这样不好吗?
: ...................
--
修改:milksea FROM 124.64.18.*
FROM 124.64.18.*
C++标准委员会的人脑子不进水的话,当年就没JAVA什么事了。
--
FROM 101.88.159.*
可以。startTime与endTime可以以任何粒度表示。内部统一转换为纳秒序列,运算完毕统一转换为结果粒度。
【 在 finlab 的大作中提到: 】
: duration_cast<duration<double, milli>>(endTime - startTime).count())
: 直接加个方法:(endTime - startTime).milli_seconds() 这样不好吗?
: 又不会弄混单位,写起来也简单。
: ...................
--
FROM 221.218.60.*
概念一直很清楚,你说的那么多的不是时间,时间点和时间段都是绝对的,时间粒度秒也是绝对定义的。
你纠结那么多的是墙上时间,是给人看的,相当于各种诡异的 printf 格式, 不用展示的话完全不用去考虑。
【 在 poggy 的大作中提到: 】
:
: 【 在 ylh0315 的大作中提到: 】
: : 如果有夏时制,或跨时区计算时间怎么办?
: : 如在美国的铁路列车时刻表。
: : 所以,基础时间变量只能以格林威治时间为准,以某个时间原点为起点,按一定时间粒度计量的一个整数。所有的时间点都采用这个坐标系计算。最后,转换为你习惯的格式显示出来。
#发自zSMTH-v-@钛星
--
FROM 222.129.52.*