7

根据ISO 8601,时间可以用不同的格式指定。

我的程序不知道将指定哪种确切的 ISO 8601 格式。

在这种情况下,如何将其转换为 time_t?

strptime要求您指定格式(在我的情况下我事先不知道)。

最终目标:比较 2 个 time_t 时间戳。

编辑 0:因为我的目标是比较 2 个时间戳,所以 time_t 到 ISO 8601 的转换也将起作用。

4

2 回答 2

7

如果您在类似 UNIX 的机器上,请尝试getdate。界面很时髦,但效果很好。

识别哪些格式由环境变量 DATEMSK 命名的文件控制。此文件应包含可传递给 strptime 的有效格式字符串行。

于 2011-07-07T23:00:42.703 回答
2

你说你最终需要比较两个time_t值。但是您如何获得这些值?如果它们作为字符串发送,那么如果您的机器支持,那么Byron Whitlock回答是合理的getdate()。如果它们已经是time_t,那么您可以比较时间值。如果您需要将time_t本地生成的字符串与远程生成的字符串进行比较,那么您将陷入困境;您必须以某种方式知道发送数据时使用了哪种 ISO 8601 样式。

请注意,ISO 8601 期望交换信息的两个系统将就它们将使用的符号达成一致,特别是它们将就哪些字段可以省略(如果有)以及标点符号是否将字段分开达成一致。如果您知道(单一)格式,或者可以配置您的系统,以便对于每个数据源,您现在将使用 ISO 8601 格式,那么 POSIXstrptime()函数几乎可以处理所有事情 - 尽管您需要知道您的代码如何将处理任何未定义的字段。

该标准的全称是:“ ISO 8601:2004 数据元素和交换格式——信息交换——日期和时间的表示”。其第3.7 节相互协议说:

本国际标准中确定的某些表述只有在信息交换合作伙伴相互同意的情况下才允许使用。此类协议应确保可能出现该表示的字段不允许包含无法明确区分与约定表示的其他表示。

于 2011-07-08T00:28:57.950 回答