在 c++ 中验证日期格式
Validating a date format in c++
我正在尝试通过创建流来验证诸如此行(01 10 2017)的日期格式。
if(i%5==4){ //DATE
std::string date;
int day;
int month;
int year;
std::ostringstream oss(date);
oss >> day;
oss >> month;
oss >> year;
if (day >=0 && day <= 31){
return true;}
if (month >=01 && month <= 12){
return true;}
if (year >=1900){
return true;}
}
但是,代码无法编译。我能做些什么来改进验证?
谢谢
我能做些什么来改进验证?
使用经过良好测试的日期/时间库,例如 Howard Hinnant 的免费、开源、仅标头日期/时间库。
bool
is_DMY(const std::string& date)
{
std::istringstream in{date};
date::year_month_day ymd;
in >> date::parse("%d %m %Y", ymd);
return !in.fail();
}
使用示例:
int
main()
{
std::cout << is_DMY("30 09 2017") << 'n';
std::cout << is_DMY("31 09 2017") << 'n';
}
其中输出:
1
0
这表明 OP 中的第一个测试:
if (day >=0 && day <= 31){
return true;}
将过早返回"31 09 2017"的true
。 9月只有30天。
希望这有帮助。
if(i%5==4){ //DATE
std::string date;
int day;
int month;
int year;
std::ostringstream oss(date);
oss << day;
oss << month;
oss << year;
const int lookup_table[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
if (!(month >= 1 && month <= 12)){
return false;}
if (!(day >= 1 && day <= lookup_table[month-1])){
return false;}
if (!(year >= 1900)){
return false;}
return true;
}
相关文章:
- 日期格式为C++
- 如何在QTableView中排序和更改日期格式
- 如何检查日期格式(日/月/年)是否正确C++
- 如何使用put_time()设置日期格式以删除前面的空格和零
- 在 c++ 中验证日期格式
- 使用字符串流设置日期格式
- 日期格式-将日期添加到日期
- 如何在黑莓10中将日期格式转换为字符串
- 提升公历日期格式会产生错误的结果
- Excel 国际日期格式
- 日期格式操作(年/月/日到月/日/年)
- 使用预处理器定义的日期格式
- 将日期格式Www-Mmm-dd hh:mm:ss yyyy转换为c++中的dd hh:mm:ss字符串
- 将字符串设置为日期格式
- 时间刻度到日期格式
- 转换日期格式
- 获取Win32系统日期格式字符串
- 在c++中自定义日期格式
- 如何检查日期格式的有效性(例如,%d/%m/%Y-%H:% m:%S)
- 以字符串形式返回整数值以进行日期格式设置