【问题标题】:C++ Convert time ET to CET or something elseC++ 将时间 ET 转换为 CET 或其他
【发布时间】:2012-11-29 13:39:48
【问题描述】:

我正在解析包含日期和时间的文件。 假设我有以下格式的日期和时间:

2009/07/18 10:48:39 CET (value in txt-file)

这是在 ET:

2009/07/18 4:48:39 ET (could also be the value i parsed)

是否有在时间/日期之间转换的解决方案?也许提升?

在 boost 文档中找不到有用的信息。

假设我想在 c++ 中从 CET 到 ET 或 ET 到 EST 或 CET 到 EST,你会怎么做?

【问题讨论】:

    标签: c++ timezone converter


    【解决方案1】:

    strftime 允许您使用日期时间格式字符(%Y、%m、%d 等)打印出struct tm* 对象。

    你可以做的是通过解析你的输入数据来加载一个struct tm*对象(假设它是常规的,这不应该需要很多代码),然后使用一些基于自定义逻辑的修改 tm 结构的各个部分在您的时区转换(添加小时,然后检查是否需要根据新小时值更新日期),然后通过 strftime 以您想要的格式打印此日期时间值。不像 php 中可用的 strptime/strftime 函数那么简单,但仍然是一个解决方案。

    【讨论】:

    • 谢谢!但这并不是我真正想要的。我需要一个在 ET 和 CET 或 EST 之间转换的解决方案。知道是否有可以做到这一点的库吗?
    • 看起来 boost 确实支持一些日期时间修改,请参阅 boost.org/doc/libs/1_52_0/doc/html/date_time.html
    • 另外,请参阅此线程stackoverflow.com/questions/13846334/…。我认为 boost 会有一种解析函数,所以你不必手动加载 boost 特定的时间结构(如上),但我没有 boost datetime 的经验。
    • 好的。谢谢,我会看看boost。我已经忽略了 boost 并且找不到任何对 ET 到 EST 或 CET 到 ET 等的支持。也许 boost-users 邮件列表会有所帮助。谢谢!
    【解决方案2】:

    我推荐https://github.com/google/cctz

    另请注意,“CET”和“ET”不是实时时区标识符。它们可能是某些时区的缩写,但它们并不能唯一标识实际时区。如果您对文件中的数据有一定的控制权,则应将“CET”和“ET”更改为数字 UTC 偏移值,例如由%zstrftime()(和cctz::Format())生成的值。数字 UTC 偏移量和 Y/M/D H:M:S 字段将让您正确解析出确切的时间瞬间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-18
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 2021-08-15
      相关资源
      最近更新 更多