请问:如何判断一个字符串是否为合法的日期时间?

morningleaf 2004-04-20 02:11:07
一个CString类型变量,怎么判断它是否符合日期时间格式呢?
或者说,通过什么方法能够将CString转换为CTime,谢谢。

例如:
BOOL bSuccess;
bSuccess = String2Time("2003-02-28");
ASSERT(bSuccess == FALSE);
...全文
279 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
morningleaf 2004-04-20
  • 打赏
  • 举报
回复
虽然就要下班了,可看到楼上各位的热心回复,实不忍结贴。这应该是一个值得讨论的小话题,我把帖子分数加倍,延长一天时间,再次请教热心朋友,希望大家仁者见仁,把这个问题说透喽!
morningleaf 2004-04-20
  • 打赏
  • 举报
回复
To king2k(机器猫):
这个就比较接近了!

如果COleDateTime::ParseDateTime是静态成员函数,就是“直接”的方法了。谢谢!
king2k 2004-04-20
  • 打赏
  • 举报
回复
COleDateTime::ParseDateTime
我用这个,呵呵,也是“借力”
morningleaf 2004-04-20
  • 打赏
  • 举报
回复
To ymbymb(毛病大哥):
你误解了我的意思。

你的方法真多啊,可都是“借力”的思想,有没有“直接”一点的方法?当然我也并不期望直接比上面的方法省力,只想深入讨论一下。
ymbymb 2004-04-20
  • 打赏
  • 举报
回复
自己写一个也不麻烦
BOOL IsValidData(CString buf)
{
int year, month, day;
sscanf(buf, "%04d-%02d-%02d", &year, &month, &day);
SYSTEMTIME st;
memset(&st, 0, sizeof(SYSTEMTIME));
st.wYear = year;
st.wMonth = month;
st.wDay = day;
FILETIME ft;
if(SystemTimeToFileTime(&st, &ft))
return TRUE;
else
return FALSE;
}
morningleaf 2004-04-20
  • 打赏
  • 举报
回复
To ymbymb(毛病大哥):
谢谢你的提醒。

这种方法的确可行,我也曾这样想过,可当时我觉得CTime()没有返回值,无法借用它的校验,但依你的方法,的确能够解决我开始的问题!

但我感觉这种方法还不是常规方法,如果下班前没有更好的回复,就结贴,再次感谢!
morningleaf 2004-04-20
  • 打赏
  • 举报
回复
谢谢楼上的,
但判断闰年只是其中的一个现象,并不是我想知道的那种方法。
不知道Windows有没有API提供这种转换?或者其它什么方法,
这个问题今天困扰了我好久。

如VB,T_SQL都有型如CDate()的函数,可VC里该如何实现呢?
ymbymb 2004-04-20
  • 打赏
  • 举报
回复
CString buf = "2004-02-29";
int year, month, day;
sscanf(buf, "%04d-%02d-%02d", &year, &month, &day);
CTime ct(year, month, day, 0, 0, 0);
CString str = ct.Format("%Y-%m-%d");
if(str == buf)
MessageBox("日期合法!");
else
MessageBox("日期不合法!");
chenggang77 2004-04-20
  • 打赏
  • 举报
回复
被4整除且不被100整除的是闰年,但被400整除的也是闰年
如1700,1800,1900都没有02。29。
但2000有。
换句话说每400年有97个闰年(400/4-4+1=97)
morningleaf 2004-04-20
  • 打赏
  • 举报
回复
哦,刚才那个时间写错了!

改为:
BOOL bSuccess;
bSuccess = String2Time("2003-02-29");
ASSERT(bSuccess == FALSE);

bSuccess = String2Time("2004-02-29");
ASSERT(bSuccess == TRUE);

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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