windows-nt/Source/XPSP1/NT/admin/wmi/wbem/winmgmt/wbemcomn/datepart.h
2020-09-26 16:20:57 +08:00

85 lines
2 KiB
C++

//***************************************************************************
//
// (c) 2000-2001 by Microsoft Corp. All Rights Reserved.
//
// datepart.h
//
// a-davcoo 28-Feb-00 Implements the SQL datepart operation.
//
//***************************************************************************
#ifndef _DATEPART_H_
#define _DATEPART_H_
#include <strutils.h>
#include <datetimeparser.h>
#define DATEPART_YEAR 1 // "yy", "year"
#define DATEPART_MONTH 3 // "mm", "month"
#define DATEPART_DAY 5 // "dd", "day"
#define DATEPART_HOUR 8 // "hh", "hour"
#define DATEPART_MINUTE 9 // "mi", "minute"
#define DATEPART_SECOND 10 // "ss", "second"
#define DATEPART_MILLISECOND 11 // "ms", "millisecond"
class CDMTFParser;
// The CDatePart class implements the SQL "datepart" operation. To use
// this class, construct an instance, supplying the date string you wish
// to parse. Then use the GetPart() method to extract the specified part.
// Contants for the "parts" are presented above. The class makes it's own
// copy of the date string supplied during construction.
class POLARITY CDatePart
{
public:
CDatePart ();
~CDatePart ();
HRESULT SetDate (LPCWSTR lpDate);
HRESULT SetDate (LPCSTR lpDate);
HRESULT GetPart (int datepart, int *value);
protected:
CDMTFParser *m_date;
};
class POLARITY CDMTFParser
{
public:
enum {YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, MICROSECOND, OFFSET};
CDMTFParser (LPCWSTR date);
~CDMTFParser (void);
bool IsValid (void);
bool IsInterval (void);
bool IsUsed (int part);
bool IsWildcard (int part);
int GetValue (int part);
protected:
enum {INVALID=0x0, VALID=0x1, NOTSUPPLIED=0x2, NOTUSED=0x4};
enum {NUMPARTS=8};
bool m_valid;
bool m_interval;
int m_status[NUMPARTS];
int m_part[NUMPARTS];
void ParseDate (LPCWSTR date);
void ParseInterval (LPCWSTR date);
void ParseAbsolute (LPCWSTR date);
int ParsePart (LPCWSTR date, int pos, int length, int *result, int min, int max);
};
#endif // _DATEPART_H_