ISO 8601到C中的time_t转换,反之亦然

时间:2011-07-07 22:56:20

标签: c iso8601 time-t

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:7)

如果您使用的是类似UNIX的计算机,请尝试getdate。界面很时髦,但效果很好。

  

识别的格式是   由文件命名的文件控制   环境变量DATEMSK。这个   文件应包含有效行   格式化可以传递的字符串   strptime。

答案 1 :(得分:2)

您说您最终需要比较两个time_t值。但是你如何获得这些价值观呢?如果它们以字符串形式发送,那么如果您的计算机支持getdate(),则Byron Whitlockanswer似乎是合理的。如果它们已经time_t,那么您可以比较时间值。如果你需要将本地生成的time_t与远程生成的字符串进行比较,那么你就会被困在一块岩石和一块坚硬的地方之间;你必须知道在发送数据时使用哪种ISO 8601样式。

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

标准的标题是:“ ISO 8601:2004数据元素和交换 格式 - 信息交换 - 表示日期和时间“。其章节§3.7相互协议说:

  

本国际标准中确定的某些陈述仅允许双方同意   信息交换的合作伙伴。此类协议应确保代表的领域   可能会发生不允许举行其他无法明确区分的表述   同意的代表。