⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 goodtime.cpp

📁 这是VC++控制计算机时钟的一个例子
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	if (ptm != NULL)
	{
		*ptm = m_time;
	}

   // Make a static copy
   s_time = m_time;

   return &s_time;
}

#ifdef _DEBUG
CDumpContext& AFXAPI operator <<(CDumpContext& dc, CGoodTime time)
{
	if ( time.m_time.tm_mday == 0 )
		return dc << "CGoodTime(invalid)";

   CString  sTime = time.Format( "%a %b %d %H:%M:%S %Y" );

	return dc << "CGoodTime(\"" << sTime << "\")";
}
#endif

CArchive& AFXAPI operator <<(CArchive& ar, CGoodTime time)
{
	ar << time.m_time.tm_sec;
	ar << time.m_time.tm_min;
	ar << time.m_time.tm_hour;
	ar << time.m_time.tm_mday;
	ar << time.m_time.tm_mon;
	ar << time.m_time.tm_year;
	ar << time.m_time.tm_wday;
	ar << time.m_time.tm_yday;
	return ar << time.m_time.tm_isdst;
}

CArchive& AFXAPI operator >>(CArchive& ar, CGoodTime& rtime)
{
	ar >> rtime.m_time.tm_sec;
	ar >> rtime.m_time.tm_min;
	ar >> rtime.m_time.tm_hour;
	ar >> rtime.m_time.tm_mday;
	ar >> rtime.m_time.tm_mon;
	ar >> rtime.m_time.tm_year;
	ar >> rtime.m_time.tm_wday;
	ar >> rtime.m_time.tm_yday;
	return ar >> rtime.m_time.tm_isdst;
}

/////////////////////////////////////////////////////////////////////////////
// String formatting

#define maxTimeBufferSize       520
#define safeTimeBufferSize      500

CString CGoodTime::Format(LPCTSTR pFormat) const
{
	TCHAR szBuffer[maxTimeBufferSize];
	TCHAR ch;
	LPTSTR pch = szBuffer;

	while ((ch = *pFormat++) != '\0')
	{
      ASSERT(pch < &szBuffer[safeTimeBufferSize]);

      // Just because we've asserted it doesn't always make it true;
      // The code below may put us over the safe buffer size.  If
      // we aren't to the safe-point yet, anything below will fit.
      if ( pch >= &szBuffer[safeTimeBufferSize] )
      {
         return "";
      }

		if (ch == '%')
		{
			switch (ch = *pFormat++)
			{
			default:
				ASSERT(FALSE);      // probably a bad format character
			case '%':
				*pch++ = ch;
				break;
         case 'a':
            {
               char  szDays[7][4] = {
                                    "Sun",
                                    "Mon",
                                    "Tue",
                                    "Wed",
                                    "Thu",
                                    "Fri",
                                    "Sat"
                                    };
   				lstrcpy( pch, szDays[m_time.tm_wday] );
               pch += lstrlen( szDays[m_time.tm_wday] );
            }
            break;
         case 'A':
            {
               char  szDays[7][10] = {
                                    "Sunday",
                                    "Monday",
                                    "Tuesday",
                                    "Wednesday",
                                    "Thursday",
                                    "Friday",
                                    "Saturday"
                                    };
   				lstrcpy( pch, szDays[m_time.tm_wday] );
               pch += lstrlen( szDays[m_time.tm_wday] );
            }
            break;
         case 'b':
            {
               char  szMonths[12][4] = {
                                       "Jan",
                                       "Feb",
                                       "Mar",
                                       "Apr",
                                       "May",
                                       "Jun",
                                       "Jul",
                                       "Aug",
                                       "Sep",
                                       "Oct",
                                       "Nov",
                                       "Dec"
                                       };
   				lstrcpy( pch, szMonths[m_time.tm_mon] );
               pch += lstrlen( szMonths[m_time.tm_mon] );
            }
            break;
         case 'B':
            {
               char  szMonths[12][10] = {
                                        "January",
                                        "February",
                                        "March",
                                        "April",
                                        "May",
                                        "June",
                                        "July",
                                        "August",
                                        "September",
                                        "October",
                                        "November",
                                        "December"
                                        };
   				lstrcpy( pch, szMonths[m_time.tm_mon] );
               pch += lstrlen( szMonths[m_time.tm_mon] );
            }
            break;
         case 'c':
            {
               pch += wsprintf(pch, _T("%02d/%02d/%02d %02d:%02d:%02d"), 
                                    m_time.tm_mon + 1, 
                                    m_time.tm_mday, 
                                    (m_time.tm_year % 100), 
                                    m_time.tm_hour,
                                    m_time.tm_min,
                                    m_time.tm_sec );
            }
            break;
			case 'd':
				pch += wsprintf(pch, _T("%02d"), m_time.tm_mday);
				break;
			case 'H':
				pch += wsprintf(pch, _T("%02d"), m_time.tm_hour);
				break;
			case 'I':
            pch += wsprintf(pch, _T("%02d"), (m_time.tm_hour%13)+((m_time.tm_hour>12)?1:0));
				break;
         case 'j':
				pch += wsprintf(pch, _T("%03d"), m_time.tm_yday+1);
            break;
			case 'm':
				pch += wsprintf(pch, _T("%02d"), m_time.tm_mon+1);
				break;
			case 'M':
				pch += wsprintf(pch, _T("%02d"), m_time.tm_min);
				break;
			case 'p':
            pch += wsprintf(pch, _T("%s"), ((m_time.tm_hour > 12)?"PM":"AM"));
				break;
			case 'S':
				pch += wsprintf(pch, _T("%02d"), m_time.tm_sec);
				break;
         case 'U':
         case 'W':
            {
               int   wdaytemp;
               int   temp;

               if ( ch == 'W' )
               {
                  if (m_time.tm_wday == 0)  /* monday based */
                     wdaytemp = 6;
                  else
                     wdaytemp = m_time.tm_wday-1;
               }
               else
               {
                  wdaytemp = m_time.tm_wday;
               }

               if (m_time.tm_yday < wdaytemp)
               {
                  temp=0;
               }
               else 
               {
                  temp = m_time.tm_yday/7;
                  if ((m_time.tm_yday%7) >= wdaytemp)
                     temp++;
               }
   				pch += wsprintf(pch, _T("%02d"), temp);
            }
            break;
         case 'w':
				pch += wsprintf(pch, _T("%d"), m_time.tm_wday);
            break;
         case 'x':
            pch += wsprintf(pch, _T("%02d/%02d/%02d"), 
                                 m_time.tm_mon + 1, 
                                 m_time.tm_mday, 
                                 (m_time.tm_year % 100) );
            break;
         case 'X':
            pch += wsprintf(pch, _T("%02d:%02d:%02d"), 
                                 m_time.tm_hour,
                                 m_time.tm_min,
                                 m_time.tm_sec );
            break;
         case 'y':
				pch += wsprintf(pch, _T("%02d"), (m_time.tm_year%100));
            break;
         case 'Y':
				pch += wsprintf(pch, _T("%04d"), m_time.tm_year+1900);
            break;
         case 'z':
         case 'Z':
            _tzset();
            lstrcpy( pch, _tzname[((m_time.tm_isdst)?1:0)] );
            pch += lstrlen(_tzname[((m_time.tm_isdst)?1:0)]);
            break;
			}
		}
		else
		{
			*pch++ = ch;
			if (_istlead(ch))
			{
				ASSERT(pch < &szBuffer[maxTimeBufferSize]);
				*pch++ = *pFormat++;
			}
		}
	}

	*pch = '\0';
	return szBuffer;
}

CString CGoodTime::FormatGmt(LPCTSTR pFormat) const
{
   CGoodTime gmtTime( *GetGmtTm(NULL) );
   
	return gmtTime.Format(pFormat);
}

CString CGoodTime::Format(UINT nFormatID) const
{
	CString strFormat;
	VERIFY(strFormat.LoadString(nFormatID) != 0);
	return Format(strFormat);
}

CString CGoodTime::FormatGmt(UINT nFormatID) const
{
	CString strFormat;
	VERIFY(strFormat.LoadString(nFormatID) != 0);
	return FormatGmt(strFormat);
}

#ifdef _UNICODE
// These functions are provided for compatibility with MFC 3.x
CString CGoodTime::Format(LPCSTR pFormat) const
{
	CString strFormat(pFormat);
	return Format((LPCTSTR)strFormat);
}

CString CGoodTime::FormatGmt(LPCSTR pFormat) const
{
	CString strFormat(pFormat);
	return FormatGmt((LPCTSTR)strFormat);
}

CString CTimeSpan::Format(LPCSTR pFormat) const
{
	CString strFormat = pFormat;
	return Format((LPCTSTR)strFormat);
}
#endif // _UNICODE

////////////////////////////////////////////////////////////////////////////
// out-of-line inlines for binary compatibility

#ifdef _AFXDLL
#ifndef _DEBUG

CGoodTime::CGoodTime()
	{ }

CGoodTime::CGoodTime(const CGoodTime& timeSrc)
	{ m_time = timeSrc.m_time; }

#endif
#endif

/////////////////////////////////////////////////////////////////////////////

BOOL CGoodTime::operator==(CGoodTime time) const
{
   if ( ( m_time.tm_sec   == time.m_time.tm_sec   ) && 
        ( m_time.tm_min   == time.m_time.tm_min   ) && 
        ( m_time.tm_hour  == time.m_time.tm_hour  ) && 
        ( m_time.tm_mday  == time.m_time.tm_mday  ) && 
        ( m_time.tm_mon   == time.m_time.tm_mon   ) && 
        ( m_time.tm_year  == time.m_time.tm_year  ) && 
        ( m_time.tm_wday  == time.m_time.tm_wday  ) && 
        ( m_time.tm_yday  == time.m_time.tm_yday  ) && 
        ( m_time.tm_isdst == time.m_time.tm_isdst ) )
   {
      return TRUE;
   }
   else
   {
      return FALSE;
   }
}

BOOL CGoodTime::operator!=(CGoodTime time) const
{ 
   return ((*this == time) ? FALSE : TRUE); 
}

BOOL CGoodTime::operator<(CGoodTime time) const
{ 
   if ( m_time.tm_year < time.m_time.tm_year  )
   {
      return TRUE;
   }
   else
   {
      double   dThisSeconds = (m_time.tm_yday * (24 * 60 * 60)) 
                            + (m_time.tm_hour * (60 * 60))
                            + (m_time.tm_min  * 60)
                            + m_time.tm_sec;
      double   dCmpSeconds  = (time.m_time.tm_yday * (24 * 60 * 60)) 
                            + (time.m_time.tm_hour * (60 * 60))
                            + (time.m_time.tm_min  * 60)
                            + time.m_time.tm_sec;
      return ( dThisSeconds < dCmpSeconds );
   }
}

BOOL CGoodTime::operator>(CGoodTime time) const
{ 
   if ( m_time.tm_year > time.m_time.tm_year  )
   {
      return TRUE;
   }
   else
   {
      double   dThisSeconds = (m_time.tm_yday * (24 * 60 * 60)) 
                            + (m_time.tm_hour * (60 * 60))
                            + (m_time.tm_min  * 60)
                            + m_time.tm_sec;
      double   dCmpSeconds  = (time.m_time.tm_yday * (24 * 60 * 60)) 
                            + (time.m_time.tm_hour * (60 * 60))
                            + (time.m_time.tm_min  * 60)
                            + time.m_time.tm_sec;
      return ( dThisSeconds > dCmpSeconds );
   }
}

BOOL CGoodTime::operator<=(CGoodTime time) const
{ 
   return ((*this < time) || (*this == time));
}

BOOL CGoodTime::operator>=(CGoodTime time) const
{ 
   return ((*this > time) || (*this == time));
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -