Annotation of mstools/mfc/src/time.cpp, revision 1.1

1.1     ! root        1: // This is a part of the Microsoft Foundation Classes C++ library. 
        !             2: // Copyright (C) 1992 Microsoft Corporation 
        !             3: // All rights reserved. 
        !             4: //  
        !             5: // This source code is only intended as a supplement to the 
        !             6: // Microsoft Foundation Classes Reference and Microsoft 
        !             7: // QuickHelp documentation provided with the library. 
        !             8: // See these sources for detailed information regarding the 
        !             9: // Microsoft Foundation Classes product. 
        !            10: 
        !            11: #ifdef _WINDOWS
        !            12: #include "afxwin.h"
        !            13: #else
        !            14: #include "afx.h"
        !            15: #endif
        !            16: #pragma hdrstop
        !            17: 
        !            18: #ifdef AFX_CORE_SEG
        !            19: #pragma code_seg(AFX_CORE_SEG)
        !            20: #endif
        !            21: 
        !            22: #ifdef _DEBUG
        !            23: #undef THIS_FILE
        !            24: static char BASED_CODE THIS_FILE[] = __FILE__;
        !            25: #endif
        !            26: 
        !            27: #ifdef _WINDOWS
        !            28: #define sprintf wsprintf
        !            29: #endif //_WINDOWS
        !            30: 
        !            31: 
        !            32: /////////////////////////////////////////////////////////////////////////////
        !            33: // CTime - absolute time
        !            34: 
        !            35: CTime::CTime(int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec)
        !            36: {
        !            37:        struct tm atm;
        !            38:        atm.tm_sec = nSec;
        !            39:        atm.tm_min = nMin;
        !            40:        atm.tm_hour = nHour;
        !            41:        ASSERT(nDay >= 1 && nDay <= 31);
        !            42:        atm.tm_mday = nDay;
        !            43:        ASSERT(nMonth >= 1 && nMonth <= 12);
        !            44:        atm.tm_mon = nMonth - 1;                // tm_mon is 0 based
        !            45:        ASSERT(nYear >= 1900);
        !            46:        atm.tm_year = nYear - 1900;             // tm_year is 1900 based
        !            47:        atm.tm_isdst = -1;
        !            48:        m_time = mktime(&atm);
        !            49:        ASSERT(m_time != -1);           // indicates an illegal input time
        !            50: }
        !            51: 
        !            52: CTime::CTime(WORD wDosDate, WORD wDosTime)
        !            53: {
        !            54:        struct tm atm;
        !            55:        atm.tm_sec = (wDosTime & ~0xFFE0) << 1;;
        !            56:        atm.tm_min = (wDosTime & ~0xF800) >> 5;
        !            57:        atm.tm_hour = wDosTime >> 11;
        !            58: 
        !            59:        atm.tm_mday = wDosDate & ~0xFFE0;
        !            60:        atm.tm_mon = ((wDosDate & ~0xFE00) >> 5) - 1;
        !            61:        atm.tm_year = (wDosDate >> 9) + 80;
        !            62:        atm.tm_isdst = -1;
        !            63:        m_time = mktime(&atm);
        !            64:        ASSERT(m_time != -1);           // indicates an illegal input time
        !            65: }
        !            66: 
        !            67: #ifdef _NTWIN
        !            68: CTime::CTime(const _SYSTEMTIME& sysTime)
        !            69: {
        !            70:        if (sysTime.wYear < 1900)
        !            71:        {
        !            72:                        time_t time0 = 0L;
        !            73:                        CTime timeT(time0);
        !            74:                        *this = timeT;
        !            75:        }
        !            76:        else
        !            77:        {
        !            78:                CTime timeT(
        !            79:                        (int)sysTime.wYear,
        !            80:                        (int)sysTime.wMonth,
        !            81:                        (int)sysTime.wDay,
        !            82:                        (int)sysTime.wHour,
        !            83:                        (int)sysTime.wMinute,
        !            84:                        (int)sysTime.wSecond
        !            85:                );
        !            86:                *this = timeT;
        !            87:        }
        !            88: }
        !            89: 
        !            90: CTime::CTime(const _FILETIME& fileTime) 
        !            91: {      
        !            92:        _SYSTEMTIME sysTime;
        !            93:        VERIFY(FileTimeToSystemTime((LPFILETIME)&fileTime, (LPSYSTEMTIME)&sysTime));
        !            94:        CTime timeT(sysTime);
        !            95:        *this = timeT;
        !            96: }
        !            97: #endif
        !            98: 
        !            99: CTime
        !           100: CTime::GetCurrentTime()
        !           101: /*
        !           102:   -- return the current system time
        !           103: */
        !           104: {
        !           105:        return CTime(::time(NULL));
        !           106: }
        !           107: 
        !           108: struct tm*
        !           109: CTime::GetGmtTm(struct tm* ptm /* = NULL */) const
        !           110: /*
        !           111:   -- note uses global static buffer
        !           112: */
        !           113: {
        !           114:        if (ptm != NULL)
        !           115:                return &(*ptm = *gmtime(&m_time));
        !           116:        else
        !           117:                return gmtime(&m_time);
        !           118: }
        !           119: 
        !           120: struct tm*
        !           121: CTime::GetLocalTm(struct tm* ptm /* = NULL */) const
        !           122: /*
        !           123:   -- note uses global static buffer
        !           124: */
        !           125: {
        !           126:        if (ptm != NULL)
        !           127:                return &(*ptm = *localtime(&m_time));
        !           128:        else
        !           129:                return localtime(&m_time);
        !           130: }
        !           131: 
        !           132: #ifdef _DEBUG
        !           133: CDumpContext&
        !           134: operator <<(CDumpContext& dc, CTime time)
        !           135: {
        !           136:        char* psz = ctime(&time.m_time);
        !           137:        if (psz == NULL)
        !           138:                return dc << "CTime(invalid #" << time.m_time << ")";
        !           139: 
        !           140:        // format it
        !           141:        psz[24] = '\0';                 // nuke newline
        !           142:        return dc << "CTime(\"" << psz << "\")";
        !           143: }
        !           144: #endif
        !           145: 
        !           146: CArchive&
        !           147: operator <<(CArchive& ar, CTime time)
        !           148: {
        !           149:        return ar << (DWORD) time.m_time;
        !           150: }
        !           151: 
        !           152: CArchive&
        !           153: operator >>(CArchive& ar, CTime& rtime)
        !           154: {
        !           155:        return ar >> (DWORD&) rtime.m_time;
        !           156: }
        !           157: 
        !           158: 
        !           159: /////////////////////////////////////////////////////////////////////////////
        !           160: // CTimeSpan - relative time
        !           161: 
        !           162: #ifdef _DEBUG
        !           163: CDumpContext&
        !           164: operator <<(CDumpContext& dc, CTimeSpan timeSpan)
        !           165: {
        !           166:        return dc << "CTimeSpan(" << timeSpan.GetDays() << " days, " <<
        !           167:                 timeSpan.GetHours() << " hours, " <<
        !           168:                 timeSpan.GetMinutes() << " minutes and " <<
        !           169:                 timeSpan.GetSeconds() << " seconds)";
        !           170: }
        !           171: #endif
        !           172: 
        !           173: CArchive&
        !           174: operator <<(CArchive& ar, CTimeSpan timeSpan)
        !           175: {
        !           176:        return ar << (DWORD) timeSpan.m_timeSpan;
        !           177: }
        !           178: 
        !           179: CArchive&
        !           180: operator >>(CArchive& ar, CTimeSpan& rtimeSpan)
        !           181: {
        !           182:        return ar >> (DWORD&) rtimeSpan.m_timeSpan;
        !           183: }
        !           184: 
        !           185: 
        !           186: /////////////////////////////////////////////////////////////////////////////
        !           187: // String formatting
        !           188: 
        !           189: #ifndef _WINDLL
        !           190: 
        !           191: #define maxTimeBufferSize               128
        !           192:        // Verifies will fail if the needed buffer size is too large
        !           193: 
        !           194: CString
        !           195: CTimeSpan::Format(const char* pFormat)
        !           196: /*
        !           197:   -- formatting timespans is a little trickier than formatting CTimes
        !           198:   -- we are only interested in relative time formats, ie. it is illegal
        !           199:         to format anything dealing with absolute time (i.e. years, months,
        !           200:         day of week, day of year, timezones, ...)
        !           201:   -- only valid formats:
        !           202:                %D - # of days -- NEW !!!
        !           203:                %H - hour in 24 hour format
        !           204:                %M - minute (0-59)
        !           205:                %S - seconds (0-59)
        !           206:                %% - percent sign
        !           207: */
        !           208: {
        !           209:        char szBuffer[maxTimeBufferSize];
        !           210:        char ch;
        !           211:        char* pch = szBuffer;
        !           212: 
        !           213:        while ((ch = *pFormat++) != '\0')
        !           214:        {
        !           215:                ASSERT(pch < &szBuffer[maxTimeBufferSize]);
        !           216:                if (ch == '%')
        !           217:                {
        !           218:                        int num;
        !           219:                        switch (ch = *pFormat++)
        !           220:                        {
        !           221:                        default:
        !           222:                                ASSERT(FALSE);          // probably a bad format character
        !           223:                        case '%':
        !           224:                                *pch++ = ch;
        !           225:                                break;
        !           226:                        case 'D':
        !           227:                                pch += sprintf(pch, "%ld", GetDays());
        !           228:                                break;
        !           229:                        case 'H':
        !           230:                                num = GetHours();
        !           231:                                goto format_num;
        !           232:                        case 'M':
        !           233:                                num = GetMinutes();
        !           234:                                goto format_num;
        !           235:                        case 'S':
        !           236:                                num = GetSeconds();
        !           237: format_num:
        !           238:                                pch += sprintf(pch, "%02d", num);
        !           239:                                break;
        !           240:                        }
        !           241:                }
        !           242:                else
        !           243:                {
        !           244:                        *pch++ = ch;
        !           245:                }
        !           246:        }
        !           247:        *pch = '\0';
        !           248: 
        !           249:        return szBuffer;
        !           250: }
        !           251: 
        !           252: CString
        !           253: CTime::Format(const char* pFormat)
        !           254: {
        !           255:        char    szBuffer[maxTimeBufferSize];
        !           256: 
        !           257:        VERIFY(strftime(szBuffer, sizeof(szBuffer), pFormat,
        !           258:                localtime(&m_time)));
        !           259:        return szBuffer;
        !           260: }
        !           261: 
        !           262: CString
        !           263: CTime::FormatGmt(const char* pFormat)
        !           264: {
        !           265:        char    szBuffer[maxTimeBufferSize];
        !           266: 
        !           267:        VERIFY(strftime(szBuffer, sizeof(szBuffer), pFormat,
        !           268:                gmtime(&m_time)));
        !           269:        return szBuffer;
        !           270: }
        !           271: #endif //_WINDLL
        !           272: 
        !           273: /////////////////////////////////////////////////////////////////////////////

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.