【问题标题】:Populate struct tm填充结构 tm
【发布时间】:2015-04-27 12:40:17
【问题描述】:

标准 C/C++ 库中是否有一些东西会填充 struct tm

更具体地说明我的问题:我希望能够提供一个日期并从中填充struct tm(例如:1-1-2000 00:00:01。)对于大多数字段,我可以直接插入数据,只是不知道tm_wdaytm_isdst

我真的在寻找一种方法来填充这两个 而无需编写一些复杂的星期几状态机。

【问题讨论】:

  • 大多数情况下您不需要它们。忽略它们或设置为 0
  • @ForceBru 不,不,我想要它们。我想从我的程序中输出它们。
  • mktime实际上是指定对传入的tm进行规范化。
  • @T.C.这太强大了!我不知道。它是如何规范化的,即假设哪些字段是正确的?
  • @JonathanMee 它忽略了tm_wdaytm_yday;其他值用于确定tm 所指的实际时间点,然后相应地设置结构成员。

标签: c++ c time dayofweek chrono


【解决方案1】:

mktime 听起来是您最好的选择。您传递给它的 struct tm 不需要具有指定范围内的值;它对字段进行规范化,包括重新计算tm_wdaytm_yday。要让它尝试确定 DST 是否生效,请在调用 mktime 之前将 tm_isdst 成员设置为负数。

如果您是从字符串转换,您可以使用get_time 操纵器将信息提取到tm

【讨论】:

    【解决方案2】:

    你想要mktime:

    tm_wdaytm_yday 组件的原始值 结构被忽略,其他组件的原始值 不限于上述范围。

    mktime 可以用作某种规范化函数,以确保所有字段之后都是一致的。


    【讨论】:

      猜你喜欢
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 2017-04-11
      • 1970-01-01
      • 2012-08-14
      相关资源
      最近更新 更多