【问题标题】:Synchronize dates between Java and C++在 Java 和 C++ 之间同步日期
【发布时间】:2010-10-28 12:58:02
【问题描述】:

我有一个在未连接到互联网的设备上运行的应用程序。操作系统是 Windows XP。 有 C++ 模块和 Java 模块通过套接字进行交互。 Java 部分需要根据其日期和时间从 C++ 部分获取文件。当 DST 开关到达时,他们停止工作。 似乎 C++ 忽略了 DST,因为 Windows 没有下载每年的 DST 更新,而 Java 根据它拥有的一些内部表来处理 DST。 我正在编程的设备必须能够连续运行,与网络断开连接并在不同的国家/地区运行。 我的问题是:如何让 Java 和 C++ 都忽略外部更新并根据一些预定义的 DST 表进行操作。

【问题讨论】:

  • 澄清一下:我希望手动控制申请时间,忽略外界的任何干预。

标签: java c++ dst


【解决方案1】:

将日期编码为包含时区信息的字符串(ISO 8601 是最完整的标准)。使用一个好的框架来解析每一侧的格式。 Boost (C++) 和 Joda (Java) 对此提供了出色的支持。

纪元时间不适用于您,因为它不代表时区。

如果您需要调整时区以使用它进行集中工作,那么请在 UTC 上标准化,并允许客户端将日期/时间调整到其区域设置以用于显示目的或进行本地操作。否则,如果所有操作和显示都在本地时区完成,则只需在本地时区存储/检索日期/时间。

【讨论】:

  • 是的。我想将时区设置为 UTC 就足够了。双方将同步。可以手动设置时钟以匹配当前时间。
  • 顺便说一句,如果您使用良好的转换框架,则没有真正的理由将其强制为 UTC。如果最终使用“服务器本地”时间作为您的标准更容易或更务实,那么它可以成为 UTC 的可接受替代品。根据您的本地设置和要求决定。
【解决方案2】:

您是否必须使用对 DST 敏感的时间表示?您可以使用 Unix 时间(这可能是我会使用的时间)、TAI 或任何其他时间——自[某个时代] 系统,而不必担心诸如夏令时或闰秒之类的事情。

【讨论】:

  • 使用自 1970 年以来的秒数表示对我不起作用。 C++ 和 Java 模块需要知道一天的结束时间(当地时区的一天)。
【解决方案3】:

我建议您使用 GMT+0 记录所有日期,并仅在显示时调整时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多