|
|
/*++
Copyright (C) 1996-2001 Microsoft Corporation
Module Name:
DATETIMEPARSER.H
Abstract:
Validates a date/time string and converts into it's component values.
History:
--*/
#ifndef _datetimeparser_
#define _datetimeparser_
#include "corepol.h"
class POLARITY CDateTimeParser { public: enum { ok = 0, failed, nothingLeft };
//nDayFormatPreference values
typedef enum { dmy, dym, mdy, myd, ydm, ymd } DayFormatPreference;
//Constructor. This takes a DateTime string and parses it.
CDateTimeParser(const TCHAR *pszDateTime);
//Destructor. Tidies up after itself.
~CDateTimeParser();
//Tidies up and parses a new date and time.
BOOL SetDateTime(const TCHAR *pszDateTime);
//Returns the status of the currently parsed date/time.
BOOL IsValidDateTime() { return m_bValidDateTime; }
//Retrieves the bits and pieces we found. Zero means it was not
//found or was zero! This may change!
unsigned char GetDay() { return m_nDay; } unsigned char GetMonth() { return m_nMonth; } unsigned int GetYear() { return m_nYear; } unsigned char GetHours() { return m_nHours; } unsigned char GetMinutes() { return m_nMinutes; } unsigned char GetSeconds() { return m_nSeconds; } unsigned int GetMicroseconds() { return m_nMicroseconds; } int GetUTC() { return m_nUTC; }
int FillDMTF(WCHAR* pwszBuffer, size_t cchSize);
// Static helper functions to allow other code to perform quick DMTF DateTime validation
// without executing a lot of unnecessary NLS code.
static BOOL CheckDMTFDateTimeFormat(const TCHAR *wszDateTime, BOOL bFailIfRelative = FALSE, BOOL bFailIfUnzoned = FALSE); static BOOL CheckDMTFDateTimeInterval(const TCHAR *wszInterval);
protected:
// Protected constructor, to keep outside code from instantiating us in a half-initialized
// state. This constructor is used by a static helper function for validating DMTF formats.
CDateTimeParser(void);
// Prevents others from accessing
//Resets all the date/time values to the default values.
//If bSQL is TRUE it sets to the SQL default. Otherwise
//sets to the DMTF default.
void ResetDateTime(BOOL bSQL); void ResetDate(BOOL bSQL); void ResetTime(BOOL bSQL);
//Does a check to make sure the date/time is in the DMTF
//date/time format.
//Fills in the class date/time elements.
BOOL CheckDMTFDateTimeFormatInternal(const TCHAR *pszDateTime);
//Does a check from the start of the string specified. If
//bCheckTimeAfter set a call to CheckTimeFormat is called
//after each successful parse of the date.
//Fills in the class date/time elements.
BOOL CheckDateFormat(const TCHAR *pszDate, BOOL bCheckTimeAfter);
//Does a check from the start of the string specified. If
//bCheckDateAfter set a call to CheckDateFormat is called
//after each successful parse of the time.
//Fills in the class date/time elements.
BOOL CheckTimeFormat(const TCHAR *pszTime, BOOL bCheckDateAfter);
BOOL DateFormat1(const TCHAR *pszDate, BOOL bCheckTimeAfter); BOOL DateFormat2(const TCHAR *pszDate, BOOL bCheckTimeAfter); BOOL DateFormat3(const TCHAR *pszDate, BOOL bCheckTimeAfter); BOOL DateFormat4(const TCHAR *pszDate, BOOL bCheckTimeAfter); BOOL DateFormat5(const TCHAR *pszDate, BOOL bCheckTimeAfter); BOOL DateFormat6(const TCHAR *pszDate, BOOL bCheckTimeAfter); BOOL DateFormat7(const TCHAR *pszDate, BOOL bCheckTimeAfter); BOOL DateFormat8(const TCHAR *pszDate, BOOL bCheckTimeAfter); BOOL DateFormat9(const TCHAR *pszDate, const TCHAR *pszDateSeparator, BOOL bCheckTimeAfter); BOOL DateFormat10(const TCHAR *pszDate, const TCHAR *pszDateSeparator, BOOL bCheckTimeAfter); BOOL DateFormat11(const TCHAR *pszDate, const TCHAR *pszDateSeparator, BOOL bCheckTimeAfter); BOOL DateFormat12(const TCHAR *pszDate, const TCHAR *pszDateSeparator, BOOL bCheckTimeAfter); BOOL DateFormat13(const TCHAR *pszDate, const TCHAR *pszDateSeparator, BOOL bCheckTimeAfter); BOOL DateFormat14(const TCHAR *pszDate, const TCHAR *pszDateSeparator, BOOL bCheckTimeAfter); BOOL DateFormat15(const TCHAR *pszDate, BOOL bCheckTimeAfter);
BOOL TimeFormat1(const TCHAR *pszTime, BOOL bCheckDateAfter); BOOL TimeFormat2(const TCHAR *pszTime, BOOL bCheckDateAfter); BOOL TimeFormat3(const TCHAR *pszTime, BOOL bCheckDateAfter); BOOL TimeFormat4(const TCHAR *pszTime, BOOL bCheckDateAfter); BOOL TimeFormat5(const TCHAR *pszTime, BOOL bCheckDateAfter); BOOL TimeFormat6(const TCHAR *pszTime, BOOL bCheckDateAfter); BOOL TimeFormat7(const TCHAR *pszTime, BOOL bCheckDateAfter); BOOL TimeFormat8(const TCHAR *pszTime, BOOL bCheckDateAfter); BOOL TimeFormat9(const TCHAR *pszTime, BOOL bCheckDateAfter);
//Checks for long and short month string. Leading spaces allowed.
int IsValidMonthString(TCHAR *pszString, const TCHAR *pszSeparator, TCHAR *pszFullMonth[13], TCHAR *pszShortMonth[13]);
//Checks for a month as a numeric string. Leading spaces allowed.
//Checks to make sure month is in range 1-12
int IsValidMonthNumber(TCHAR *pszString, const TCHAR *pszSeparator);
//Checks for valid day number. Does no validation of
//number except checking it is in range of 1-31
//Leading spaces allowed.
int IsValidDayNumber(TCHAR *pszString, const TCHAR *pszSeparator);
//Checks for valid year number. Does conversion for
//2 digit years. Leading spaces allowed.
int IsValidYearNumber(TCHAR *pszString, const TCHAR *pszSeparator, BOOL bFourDigitsOnly);
//Checks for valid hours. Validates for range 0-23
//Leading spaces allowed.
int IsValidHourNumber(TCHAR *pszString, const TCHAR *pszSeparator);
//Checks for valid minutes. Validates for range 0-59.
//No leading spaces allowed.
int IsValidMinuteNumber(TCHAR *pszString, const TCHAR *pszSeparator);
//Checks for valid minutes. Validates for range 0-59.
//No leading spaces allowed.
int IsValidSecondNumber(TCHAR *pszString, const TCHAR *pszSeparator);
//treats the number as thousandth of a second.
int IsValidColonMillisecond(TCHAR *pszString, const TCHAR *pszSeparator);
//converts value to a thousandth of a second based on number
//of digits included.
int IsValidDotMillisecond(TCHAR *pszString, const TCHAR *pszSeparator);
//Checks for valid AM/PM string. Leading space is allowed. If
//PM, adds 12 onto hours. Validates hours so it is < 23.
BOOL IsValidAmPmString(TCHAR *pszString, const TCHAR *pszSeparator, TCHAR *pszAmPm[2]);
//Checks for a valid [yy]yyMMdd or yyyy day. Validates
//month to 1..12 and day to 1..31
BOOL IsValidYearMonthDayNumber(TCHAR *pszString);
void GetLocalInfoAndAlloc(LCTYPE LCType, LPTSTR &lpLCData); void GetPreferedDateFormat(); TCHAR* AllocAmPm();
private: //Localised strings retrieved from GetLocalInfo which holds the long month strings
TCHAR * m_pszFullMonth[13];
//Localised strings retrieved from GetLocalInfo which holds the short month strings
TCHAR * m_pszShortMonth[13];
//Localised strings retrieved from GetLocalInfo which holds the short am/pm strings
TCHAR *m_pszAmPm[2];
//Lets us know if the string is valid or not.
BOOL m_bValidDateTime;
//These are the values which get filled in as we find then throughout the
//parsing.
unsigned char m_nDay; unsigned char m_nMonth; unsigned int m_nYear; unsigned char m_nHours; unsigned char m_nMinutes; unsigned char m_nSeconds; unsigned int m_nMicroseconds; int m_nUTC;
//Preference for date decoding
DayFormatPreference m_nDayFormatPreference; };
BOOL POLARITY NormalizeCimDateTime( IN LPCWSTR pszSrc, OUT BSTR *strAdjusted );
#endif
|