You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
5.2 KiB
169 lines
5.2 KiB
// *********************************************************************************
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//
|
|
// Module Name:
|
|
//
|
|
// DateTimeObject.cpp
|
|
//
|
|
// Abstract:
|
|
//
|
|
// This component is required by VB Scripts to get date and time in various calenders.
|
|
//
|
|
// Author:
|
|
//
|
|
// Bala Neerumalla ([email protected]) 31-July-2001
|
|
//
|
|
// Revision History:
|
|
//
|
|
// Bala Neerumalla ([email protected]) 31-July-2001 : Created It.
|
|
//
|
|
// *********************************************************************************
|
|
|
|
#include "pch.h"
|
|
#include "ScriptingUtils.h"
|
|
#include "DateTimeObject.h"
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDateTimeObject
|
|
|
|
// ***************************************************************************
|
|
// Routine Description:
|
|
// This the entry point to this utility.
|
|
//
|
|
// Arguments:
|
|
// [ in ] bstrInDateTime : argument containing the date and time in
|
|
// YYYYMMDDHHMMSS.MMMMMM format
|
|
// [ out ] pVarDateTime : argument returning date and time in Locale
|
|
// specific format
|
|
//
|
|
// Return Value:
|
|
// This functin returns S_FALSE if any errors occur else returns S_OK.
|
|
// ***************************************************************************
|
|
|
|
STDMETHODIMP CDateTimeObject::GetDateAndTime(BSTR bstrInDateTime, VARIANT *pVarDateTime)
|
|
{
|
|
DWORD dwCount = 0;
|
|
BOOL bLocaleChanged = FALSE;
|
|
SYSTEMTIME systime;
|
|
CHString strDate,strTime;
|
|
LCID lcid;
|
|
|
|
try
|
|
{
|
|
lcid = GetSupportedUserLocale(bLocaleChanged);
|
|
systime = GetDateTime(bstrInDateTime);
|
|
|
|
dwCount = GetDateFormat( lcid, 0, &systime,
|
|
((bLocaleChanged == TRUE) ? _T("MM/dd/yyyy") : NULL), NULL, 0 );
|
|
|
|
// get the required buffer
|
|
LPWSTR pwszTemp = NULL;
|
|
pwszTemp = strDate.GetBufferSetLength( dwCount + 1 );
|
|
|
|
// now format the date
|
|
GetDateFormat( lcid, 0, &systime,
|
|
(LPTSTR)((bLocaleChanged == TRUE) ? _T("MM/dd/yyyy") : NULL), pwszTemp, dwCount );
|
|
|
|
// release the buffer3
|
|
strDate.ReleaseBuffer();
|
|
|
|
// get the formatted time
|
|
// get the size of buffer that is needed
|
|
|
|
dwCount = 0;
|
|
dwCount = GetTimeFormat( lcid, 0, &systime,
|
|
((bLocaleChanged == TRUE) ? L"HH:mm:ss" : NULL), NULL, 0 );
|
|
|
|
// get the required buffer
|
|
pwszTemp = NULL;
|
|
pwszTemp = strTime.GetBufferSetLength( dwCount + 1 );
|
|
|
|
// now format the date
|
|
GetTimeFormat( lcid, 0, &systime,
|
|
((bLocaleChanged == TRUE) ? L"HH:mm:ss" : NULL), pwszTemp, dwCount );
|
|
|
|
// release the buffer
|
|
strTime.ReleaseBuffer();
|
|
|
|
|
|
// Initialize the Out Variant.
|
|
VariantInit(pVarDateTime);
|
|
pVarDateTime->vt = VT_BSTR;
|
|
|
|
|
|
// Put it in the out parameter.
|
|
pVarDateTime->bstrVal = SysAllocString((LPCWSTR)(strDate + L" " + strTime));
|
|
}
|
|
catch( ... )
|
|
{
|
|
return E_OUTOFMEMORY;
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
// ***************************************************************************
|
|
// Routine Description:
|
|
// This function returns LCID of the current USer Locale. If the User locale
|
|
// is not a supported one, it would return LCID of English language.
|
|
//
|
|
// Arguments:
|
|
// [ out ] bLocaleChanged : argument returning whether the user locale is
|
|
// changed or not.
|
|
//
|
|
// Return Value:
|
|
// This function returns LCID of the User Locale.
|
|
// ***************************************************************************
|
|
|
|
LCID CDateTimeObject::GetSupportedUserLocale( BOOL& bLocaleChanged )
|
|
{
|
|
// local variables
|
|
LCID lcid;
|
|
|
|
// get the current locale
|
|
lcid = GetUserDefaultLCID();
|
|
|
|
// check whether the current locale is supported by our tool or not
|
|
// if not change the locale to the english which is our default locale
|
|
bLocaleChanged = FALSE;
|
|
if ( PRIMARYLANGID( lcid ) == LANG_ARABIC || PRIMARYLANGID( lcid ) == LANG_HEBREW ||
|
|
PRIMARYLANGID( lcid ) == LANG_THAI || PRIMARYLANGID( lcid ) == LANG_HINDI ||
|
|
PRIMARYLANGID( lcid ) == LANG_TAMIL || PRIMARYLANGID( lcid ) == LANG_FARSI )
|
|
{
|
|
bLocaleChanged = TRUE;
|
|
lcid = MAKELCID( MAKELANGID( LANG_ENGLISH, SUBLANG_DEFAULT ), SORT_DEFAULT ); // 0x409;
|
|
}
|
|
|
|
// return the locale
|
|
return lcid;
|
|
}
|
|
|
|
// ***************************************************************************
|
|
// Routine Description:
|
|
// This function extracts the date and time fields from a string.
|
|
//
|
|
// Arguments:
|
|
// [ in ] strTime : string containing the date and time in the format
|
|
// YYYYMMDDHHMMSS.MMMMMM.
|
|
//
|
|
// Return Value:
|
|
// returns SYSTEMTIME structure containing the date & time info present in
|
|
// strTime.
|
|
// ***************************************************************************
|
|
|
|
SYSTEMTIME CDateTimeObject::GetDateTime(CHString strTime)
|
|
{
|
|
SYSTEMTIME systime;
|
|
|
|
systime.wYear = (WORD) _ttoi( strTime.Left( 4 ));
|
|
systime.wMonth = (WORD) _ttoi( strTime.Mid( 4, 2 ));
|
|
systime.wDayOfWeek = 0;
|
|
systime.wDay = (WORD) _ttoi( strTime.Mid( 6, 2 ));
|
|
systime.wHour = (WORD) _ttoi( strTime.Mid( 8, 2 ));
|
|
systime.wMinute = (WORD) _ttoi( strTime.Mid( 10, 2 ));
|
|
systime.wSecond = (WORD) _ttoi( strTime.Mid( 12, 2 ));
|
|
systime.wMilliseconds = (WORD) _ttoi( strTime.Mid( 15, 6 ));
|
|
|
|
return systime;
|
|
}
|