【发布时间】:2013-02-17 14:06:21
【问题描述】:
我有一个表示 24 小时时间的输入字符串。有效的输入是这样的字符串:
7:04
07:4
7:4
07:04
无效的输入字符串显然是25:68。鉴于时间是今天,是否有任何简单的方法来验证时间格式,然后以纪元格式解析时间?这里有可能派上用场的任何 boost 库吗?
【问题讨论】:
标签: c++ validation time-format
我有一个表示 24 小时时间的输入字符串。有效的输入是这样的字符串:
7:04
07:4
7:4
07:04
无效的输入字符串显然是25:68。鉴于时间是今天,是否有任何简单的方法来验证时间格式,然后以纪元格式解析时间?这里有可能派上用场的任何 boost 库吗?
【问题讨论】:
标签: c++ validation time-format
您可以使用 strptime 来完成,这是类 Unix 系统上的标准: http://www.kernel.org/doc/man-pages/online/pages/man3/strptime.3.html
【讨论】:
我看到两个选项:
简单的正则表达式或 boost::xpressive(我更喜欢它)。
获取分号之间的数字并将它们转换为数字,然后检查它们的值。像这样的:
string sTime("53:30"); int iSemiColon = sTime.find(':'); if (atoi(sTime.substr(0, iSemiColon).c_str()) >= 24) return false; if (atoi(sTime.substr(iSemiColon + 1).c_str()) >= 60) return false;
【讨论】:
见this answer。如果您不限于 STL,您可以使用 boost.Regex 进行验证部分,尽管这是一个非常简单的问题,您可以轻松推出自己的解决方案。
【讨论】: