------>如何包装SYSTEMTIMER?

vcmfc 2002-01-16 12:55:12
近日在写一个SYSTEMTIMER的包装类,但遇到几个问题,请大家给点意见,如下:

1.日期有效性的检验,我自已写了一个,请大家看一下有没有更好的方法?

2.JDate的+,-与+=,-=该如何实现?,是像MFC那样引入JDateSpan还是用其它方法,这是我目前较头痛的问题,请大家给点意见!,如果也像MFC那样引入JDateSpan,那该如何实现?

先问这两个问题,请大家给点意见呀!

期待中....................

以下是JDate的头文件声明:
class JDate :public _SYSTEMTIME
{
public:
enum{invalid=-1,valid=0};
JDate();
JDate(WORD Year, WORD Month, WORD Day, WORD Hour, WORD Minute, WORD Second);
JDate(const SYSTEMTIME &tm);
JDate(const JDate &jd);
JDate(const FILETIME &fm);
JDate(const JFileTime &jf);
JDate(const VARIANT &varsrc);

public:
JDate& operator=(const JDate &jd);
JDate& operator=(const SYSTEMTIME &tm);
// JDate& operator+=(const JDate &jd);
// JDate& operator+=(const SYSTEMTIME &tm);
bool operator==(const JDate &jd);
bool operator==(const SYSTEMTIME &jd);
bool operator!=(const JDate &jd);
bool operator>(const JDate &jd);
bool operator>=(const JDate &jd);
bool operator<(const JDate &jd);
bool operator<=(const JDate &jd);

friend std::ostream& operator<<(std::ostream &os, const JDate &jd);
friend std::istream& operator>>(std::istream &is, const JDate &jd);

public:
void SetStatus(DateStatus status);
DateStatus GetStatus();
bool IsAvaiDate(const SYSTEMTIME &tm);
static JDate& GetCurrentDate();
private:
DateStatus m_status;

};
...全文
168 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
babysloth 2002-01-17
  • 打赏
  • 举报
回复
我倒建议写一个从SYSTEMTIME到标准C++里对应结构的转换函数或类,充分利用C++标准库里丰富的时间处理能力。
kylix_fan 2002-01-17
  • 打赏
  • 举报
回复
学习!
vcmfc 2002-01-17
  • 打赏
  • 举报
回复
MFC的确良COleDateTime不是从SYSTEMTIME派生的,而是内含OLE的DATE成员变量。

当成员变量为空是,返回invalid不可以吗?,空于无效有多大区别吗?,在用到空的时候用无效代替会产生哪些不良因素??


MFC我看了N遍,但就是MFC的源程序东放一个西放一个,烦。
ttzzgg_80713 2002-01-16
  • 打赏
  • 举报
回复
乍个记号。下去研究
nothingneed 2002-01-16
  • 打赏
  • 举报
回复
如果不要JDateSpan
就需要向VB一样,把绝对时间和时间段都保存在同一个对象里并自动判断
这就是VB和VC的区别,使用简单-实现复杂
nothingneed 2002-01-16
  • 打赏
  • 举报
回复
加个null是因为你的成员变量有可能为空,这时你返回什么呢?invalid?
这enum{invalid,valid,null};不是我的发明,MFC是这么写的
其实你要的东西分析一下MFC里都有
你可以参考TIMECORE.CPP AFX.INL AFX.H AFXDISP.H GMTIME.C DTOXTIME.C
vcmfc 2002-01-16
  • 打赏
  • 举报
回复
忘了,以下是我的日期检验,请大家提点意见:

bool JDate::IsAvaiDate(const SYSTEMTIME &tm)
{
if (tm.wYear<1000)
return false;

if ( (tm.wMonth<1) || (tm.wMonth>12) )
return false;

//判断是否是润年
//不被100整除的年份被4整除即为闰年,例如1992
//若能被100整除则需要能被400整除方可,例如2000年
bool byear=false;
if ( (tm.wYear%100==0) && (tm.wYear%400==0) )
byear=true;
else if (tm.wYear%4==0)
byear=true;

if (byear)
{
if ( (tm.wDay<1) || (tm.wDay>29) )
return false;
}
else if ( (tm.wDay<1) || (tm.wDay>28) )
return false;

if ( (tm.wHour<0) || (tm.wHour>24) )
return false;

if ( (tm.wMinute<0) || (tm.wMinute>60) )
return false;

if ( (tm.wSecond<0) || (tm.wSecond>60) )
return false;

return true;
}
vcmfc 2002-01-16
  • 打赏
  • 举报
回复
再加上一点:

你如果要JDateSpan,那么这个JDateSpan该如何设计?,要考虑到秒呀!
vcmfc 2002-01-16
  • 打赏
  • 举报
回复


对于null,我觉得没有必要,因为一个日期,要么valid,要么为invalid,要null,有实际用途吗?


请问nothingneed(玄痴):你要JDateSpan的理由,如果不要吗?
nothingneed 2002-01-16
  • 打赏
  • 举报
回复
我也是初学,权当帮你up一下吧
1,我觉得enum DateStatus {invalid=-1,valid=0};加个null比较好,把空值分出来
2,我觉得JDateSpan是最简单的实现方法,声明为friend class JDate
举例:
JDate::JDate(long time)
{ m_time = time; }
JDate JDate::operator-(JDateSpan timeSpan) const
{ return JDate(m_time - dateSpan.m_timeSpan); }
ccnuxjg 2002-01-16
  • 打赏
  • 举报
回复
我也来顶一把
panjet 2002-01-16
  • 打赏
  • 举报
回复
vcmfc:你的代码很好的呀!我帮你UP!
vcmfc 2002-01-16
  • 打赏
  • 举报
回复
再UP!
vcmfc 2002-01-16
  • 打赏
  • 举报
回复
up!

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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