根据ISO 8601,可以用不同的格式指定时间。
我的程序不知道将指定哪种ISO 8601格式。
在这种情况下,如何将其转换为time_t?
strptime
要求您指定格式(在我的情况下我事先不知道)。
最终目标:比较2个time_t时间戳。
编辑0:因为我的目标是比较2个时间戳,所以time_t到ISO 8601的转换也会有效。
答案 0 :(得分:7)
如果您使用的是类似UNIX的计算机,请尝试getdate。界面很时髦,但效果很好。
识别的格式是 由文件命名的文件控制 环境变量DATEMSK。这个 文件应包含有效行 格式化可以传递的字符串 strptime。
答案 1 :(得分:2)
您说您最终需要比较两个time_t
值。但是你如何获得这些价值观呢?如果它们以字符串形式发送,那么如果您的计算机支持getdate()
,则Byron Whitlock的answer似乎是合理的。如果它们已经time_t
,那么您可以比较时间值。如果你需要将本地生成的time_t
与远程生成的字符串进行比较,那么你就会被困在一块岩石和一块坚硬的地方之间;你必须知道在发送数据时使用哪种ISO 8601样式。
请注意,ISO 8601期望交换信息的两个系统将就他们将要使用的符号达成一致,特别是他们将同意哪些字段可以省略(如果有的话)以及标点符号是否将字段分开。如果您知道(单一)格式,或者可以配置您的系统以便对于每个数据源,您现在使用的是ISO 8601格式,那么POSIX strptime()
函数可以处理几乎所有内容 - 尽管您需要了解代码将如何处理任何未定义的字段。
标准的标题是:“ ISO 8601:2004数据元素和交换 格式 - 信息交换 - 表示日期和时间“。其章节§3.7相互协议说:
本国际标准中确定的某些陈述仅允许双方同意 信息交换的合作伙伴。此类协议应确保代表的领域 可能会发生不允许举行其他无法明确区分的表述 同意的代表。