判断字符串是否符合日期格式

xunhangchengwen 2010-03-02 01:07:47
如何判断输入的字符串符合日期格式:YYYY-MM-DD比如2009-1-1或2009-11-29,而不是09-1月-10 ,09-01-10之类的
...全文
610 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cphj 2010-03-02
  • 打赏
  • 举报
回复
简单的判断格式,其他数字范围的判断前面有人已经给出了
#include <sstream>
#include <iostream>
using namespace std;

int main()
{
stringstream ss("2009-1月-20");
int n;
char c;
if (ss >> n >> c >> n >> c >> n)
cout << "格式正确\n";
else
cout << "格式错误\n";
return 0;
}
赵4老师 2010-03-02
  • 打赏
  • 举报
回复
COleDateTime::ParseDateTime
kim_jinye 2010-03-02
  • 打赏
  • 举报
回复
混点可用分,混点可用分!
memese 2010-03-02
  • 打赏
  • 举报
回复
最好用正则,比如2008-03-01 可以这样
^\d{4}-\d{1-2}-\d{1-2}$
当然这样只符合时间的格式。并不完全正确。
但可以满足YYYY-MM-DD比如2009-1-1或2009-11-29,而不是09-1月-10
wx376752150 2010-03-02
  • 打赏
  • 举报
回复
引用 7 楼 xunhangchengwen 的回复:
前提 我是直接得到的是字符串2009-1月-20

你把这个字符串自己再处理下,处理成可以处理的字符串啊,比如把月删掉
昵称很不好取 2010-03-02
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

bool input(const char* p){
int year;
int month;
int day;
sscanf(p,"%d-%d月-%d",&year,&month,&day);
cout<<"输入正确:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
if(year<1000 || year>9999 || month<1 || month>12 || day<1 || day>31){
cout<<"输入有误!"<<endl;
return false;
}
cout<<"输入正确:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
return true;
}

int main(){
char c[20];
cout<<"请输入时间:";
cin>>c;
input(c);

return 0 ;
}
昵称很不好取 2010-03-02
  • 打赏
  • 举报
回复
我刚才代码还有问题,呵呵
看下面这个,还是没有判断每月天数是否合适
#include <iostream>
using namespace std;

bool input(const char* p){
int year;
int month;
int day;
sscanf(p,"%d-%d月-%d",&year,&month,&day);
cout<<"输入正确:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
if(year<999 || year>10000 || month<0 || month>12 || day<0 || day>31){
cout<<"输入有误!"<<endl;
return false;
}
cout<<"输入正确:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
return true;
}

int main(){
char c[20];
cout<<"请输入时间:";
cin>>c;
input(c);

return 0 ;
}
xunhangchengwen 2010-03-02
  • 打赏
  • 举报
回复
前提 我是直接得到的是字符串2009-1月-20
昵称很不好取 2010-03-02
  • 打赏
  • 举报
回复
那个day>29 有点小问题,作为其他月份有点小了,光考虑2月份了,楼主自己改下吧
昵称很不好取 2010-03-02
  • 打赏
  • 举报
回复
没有判断是否闰年的情况,简单的小代码~~
#include <iostream>
using namespace std;

bool input(const char* p){
int year;
int month;
int day;
sscanf(p,"%d-%d-%d",&year,&month,&day);

if(year>999 || year<10000 || month<0 || month>12 || day<0 || day>29){
cout<<"输入有误!"<<endl;
return false;
}
cout<<"输入正确:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
return true;
}

int main(){
char c[20];
cout<<"请输入时间:";
cin>>c;
input(c);

return 0 ;
}
macrojj 2010-03-02
  • 打赏
  • 举报
回复


sscanf(timeStr,"%d-%d-%d",&year,&month,&day);
诸如此类


xunhangchengwen 2010-03-02
  • 打赏
  • 举报
回复
能不能提供一段可用代码,不是正则表达式的
stardust20 2010-03-02
  • 打赏
  • 举报
回复
用正则表达式。。不然就自己分析输入字符串的格式是否满足要求
taodm 2010-03-02
  • 打赏
  • 举报
回复
google “正则表达式”

65,176

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧