?? utils.cpp
字號:
if (position + 1 >= s.length()) {
position = std::wstring::npos;
break;
}
position = position + 1;
position = s.find(_T(">"), position);
if (position == std::wstring::npos) {
break;
}
}
}
/*
* The method return current system time in VariantTime format
* used in FILEFileManagement
*/
DATE getSystemTime() {
SYSTEMTIME t;
DATE date;
BOOL isUTC = TRUE;
wchar_t localTemp [DIM_LOCAL_TEMP];
GetLocalTime (&t);
// conversion from actual time to UTC
// if propertyValue PROPERTY_SOURCEPROP_SYSTEMTIME_TO_LOCALTIME == 1 then
//wchar_t propertyValue[10];
//getClientConfigurationInternal (NULL, PROPERTY_SOURCEPROP_SPDM_SYSTEMTIME_TO_LOCALTIME, propertyValue, FALSE);
//if (wcscmp(propertyValue, TEXT("1")) == 0) {
// isUTC = TRUE;
//}
if (isUTC) {
localTimeToUTC(t);
}
wchar_t month [10];
wchar_t day [10];
wchar_t hour [10];
wchar_t minute[10];
wchar_t second[10];
// month
if (t.wMonth < 10)
wsprintf(month, TEXT("0%i"), t.wMonth);
else
wsprintf(month, TEXT("%i"), t.wMonth);
// day
if (t.wDay < 10)
wsprintf(day, TEXT("0%i"), t.wDay);
else
wsprintf(day, TEXT("%i"), t.wDay);
// hour
if (t.wHour < 10)
wsprintf(hour, TEXT("0%i"), t.wHour);
else
wsprintf(hour, TEXT("%i"), t.wHour);
// minute
if (t.wMinute < 10)
wsprintf(minute, TEXT("0%i"), t.wMinute);
else
wsprintf(minute, TEXT("%i"), t.wMinute);
// second
if (t.wSecond < 10)
wsprintf(second, TEXT("0%i"), t.wSecond);
else
wsprintf(second, TEXT("%i"), t.wSecond);
if (isUTC) {
wsprintf(localTemp, TEXT("%i%s%sT%s%s%sZ"), t.wYear, month, day, hour, minute, second);
} else {
wsprintf(localTemp, TEXT("%i%s%sT%s%s%s"), t.wYear, month, day, hour, minute, second);
}
//MessageBox (NULL, localTemp, TEXT ("Update"), MB_SETFOREGROUND |MB_OK);
systemTimeToDouble(localTemp, &date, NULL);
return date;
}
/*
* The method return current system time from VariantTime format
*
* @param tempDate : the variable to write date in
* @param date : the date in variant time format
*/
void doubleToSystemTime(wchar_t* tempDate, DATE date) {
doubleToSystemTimeHourZero(tempDate, date, FALSE);
}
/*
* Is like doubleToSystemTime but set hour to 0. It used directly for anniversary and birthday.
* if not the time represented by date is the same in which the date is written
* on the device
*/
void doubleToSystemTimeHourZero(wchar_t* tempDate, DATE date, BOOL isHourToSetToZero) {
SYSTEMTIME t;
VariantTimeToSystemTime(date, &t);
if (isHourToSetToZero) {
t.wHour = 0;
t.wMinute = 0;
t.wSecond = 0;
}
localTimeToUTC2(t);
wsprintf(tempDate, TEXT("%d%02d%02dT%02d%02d%02dZ"),
t.wYear, t.wMonth, t.wDay,
t.wHour, t.wMinute, t.wSecond);
}
/*
* Is like doubleToSystemTime but set hour to 0. It used directly for anniversary and birthday.
* if not the time represented by date is the same in which the date is written
* on the device
*/
void doubleToSystemTimeBirthday(wchar_t* tempDate, DATE date) {
SYSTEMTIME t;
VariantTimeToSystemTime(date, &t);
t.wHour = 0;
t.wMinute = 0;
t.wSecond = 0;
wchar_t month [10];
wchar_t day [10];
// month
if (t.wMonth < 10)
wsprintf(month, TEXT("0%i"), t.wMonth);
else
wsprintf(month, TEXT("%i"), t.wMonth);
// day
if (t.wDay < 10)
wsprintf(day, TEXT("0%i"), t.wDay);
else
wsprintf(day, TEXT("%i"), t.wDay);
wsprintf(tempDate, TEXT("%i-%s-%s"), t.wYear, month, day);
}
/*
* The method transform a string date in format "yyyy-MM-dd" to DATE
*
* @param dataString : the string in yyyy-MM-dd format
* @param date : the returned value into VariantTime format
* @action : the parameter to set manually hour and minute. If NULL current value are used
*/
void systemTimeToDoubleBirthday(const wchar_t* dataString, DATE* date) {
systemTimeToDoubleBirthFormat(dataString, date, TEXT("START"));
}
/*
* It is used to transform yyyy-MM-dd format date into DATE. type parameter is to set
* the hours and minutes.
* Parameter END to set hour 23:59
* Parameter START to set hour 00:00
* Set the hour to 00:00 is used for birthday, anniversary and startDate of appoitment
* when it is all day event. Set hour 23:59 for endDate when an appointment it is allDayEvent
*/
void systemTimeToDoubleBirthFormat(const wchar_t* dataString, DATE* date, const wchar_t* type) {
wchar_t* token = NULL;
wchar_t* dummy = NULL;
wchar_t* Ztoken = NULL;
wchar_t internalString[DIM_LOCAL_TEMP];
wsprintf(internalString, dataString);
wchar_t tmp[50];
int ret = 0;
SYSTEMTIME t;
TIME_ZONE_INFORMATION tmz;
GetTimeZoneInformation(&tmz);
Ztoken = wcschr(dataString, '-');
if (Ztoken == NULL) {
systemTimeToDouble(dataString, date, NULL);
return;
}
// TEXT("yyyy-MM-dd")
token = wcstok(internalString, TEXT("-"));
if (token != NULL) {
//yyyy
wcsncpy(tmp, dataString, 4);
tmp[4] = 0;
swscanf(tmp, TEXT("%d"),&t.wYear);
//MM
wcsncpy(tmp, dataString + 5, 2);
tmp[2] = 0;
swscanf(tmp, TEXT("%d"),&t.wMonth);
//dd
wcsncpy(tmp, dataString + 8, 2);
tmp[2] = 0;
swscanf(tmp, TEXT("%d"),&t.wDay);
if (wcscmp(type, TEXT("END")) == 0) {
t.wHour = 23;
t.wMinute = 59;
t.wSecond = 0;
} else {
t.wHour = 0;
t.wMinute = 0;
t.wSecond = 0;
}
// set to default
t.wMilliseconds = 0;
t.wDayOfWeek = 0;
ret = SystemTimeToVariantTime (&t, date);
} else {
(*date) = 949998.000000;
}
}
/*
* The method transform a date in format "YYYYMMDDThhmmss" or "YYYYMMDDThhmmssZ" with hour 0-24 into VariantTime format.
*
* @param dataString : the string in "YYYYMMDDThhmmss" or "YYYYMMDDThhmmssZ" format
* @param date : the returned value into VariantTime format
* @action : the parameter to set manually hour and minute. If NULL current value are used
*/
void systemTimeToDouble(const wchar_t* dataString, DATE* date, const wchar_t* action) {
wchar_t* token = NULL;
wchar_t* dummy = NULL;
wchar_t* Ztoken = NULL;
BOOL isUTC = FALSE;
wchar_t internalString[DIM_LOCAL_TEMP];
wsprintf(internalString, dataString);
wchar_t tmp[50];
int ret = 0;
SYSTEMTIME t;
TIME_ZONE_INFORMATION tmz;
GetTimeZoneInformation(&tmz);
// TEXT("20041006T203457") or TEXT("20041006T203457Z")
token = wcstok(internalString, TEXT("T"));
Ztoken = wcschr(dataString, 'Z');
if (Ztoken != NULL) {
isUTC = TRUE;
}
if (token != NULL) {
//yyyy
wcsncpy(tmp, dataString, 4);
tmp[4] = 0;
swscanf(tmp, TEXT("%d"),&t.wYear);
//MM
wcsncpy(tmp, dataString + 4, 2);
tmp[2] = 0;
swscanf(tmp, TEXT("%d"),&t.wMonth);
//dd
wcsncpy(tmp, dataString + 6, 2);
tmp[2] = 0;
swscanf(tmp, TEXT("%d"),&t.wDay);
if (action != NULL && wcscmp(action, TEXT("0000")) == 0) {
t.wHour = 0;
t.wMinute = 0;
t.wSecond = 0;
} else if (action != NULL && wcscmp(action, TEXT("2359")) == 0) {
t.wHour = 23;
t.wMinute = 59;
t.wSecond = 59;
} else {
if (wcslen(dataString) > 9) {
//HH
wcsncpy(tmp, dataString + 9, 2);
tmp[2] = 0;
swscanf(tmp, TEXT("%d"),&t.wHour);
//mm
wcsncpy(tmp, dataString + 11, 2);
tmp[2] = 0;
swscanf(tmp, TEXT("%d"),&t.wMinute);
//ss
wcsncpy(tmp, dataString + 13, 2);
tmp[2] = 0;
swscanf(tmp, TEXT("%d"),&t.wSecond);
} else {
t.wHour = 0;
t.wMinute = 0;
t.wSecond = 0;
}
}
// set to default
t.wMilliseconds = 0;
t.wDayOfWeek = 0;
if(isUTC) {
UTCToLocalTime2(t);
}
ret = SystemTimeToVariantTime (&t, date);
} else {
(*date) = 949998.000000;
}
}
/*
* return date and time of a date and if it is in utc or not
*/
BOOL getDateAndTimeAsIs(const wchar_t* dataString, DATE* date) {
wchar_t* token = NULL;
wchar_t* dummy = NULL;
wchar_t* Ztoken = NULL;
BOOL isUTC = FALSE;
wchar_t internalString[DIM_LOCAL_TEMP];
wsprintf(internalString, dataString);
wchar_t tmp[50];
int ret = 0;
SYSTEMTIME t;
TIME_ZONE_INFORMATION tmz;
GetTimeZoneInformation(&tmz);
// TEXT("20041006T203457") or TEXT("20041006T203457Z")
token = wcstok(internalString, TEXT("T"));
Ztoken = wcschr(dataString, 'Z');
if (Ztoken != NULL) {
isUTC = TRUE;
}
if (token != NULL) {
//yyyy
wcsncpy(tmp, dataString, 4);
tmp[4] = 0;
swscanf(tmp, TEXT("%d"),&t.wYear);
//MM
wcsncpy(tmp, dataString + 4, 2);
tmp[2] = 0;
swscanf(tmp, TEXT("%d"),&t.wMonth);
//dd
wcsncpy(tmp, dataString + 6, 2);
tmp[2] = 0;
swscanf(tmp, TEXT("%d"),&t.wDay);
if (wcslen(dataString) > 9) {
//HH
wcsncpy(tmp, dataString + 9, 2);
tmp[2] = 0;
swscanf(tmp, TEXT("%d"),&t.wHour);
//mm
wcsncpy(tmp, dataString + 11, 2);
tmp[2] = 0;
swscanf(tmp, TEXT("%d"),&t.wMinute);
//ss
wcsncpy(tmp, dataString + 13, 2);
tmp[2] = 0;
swscanf(tmp, TEXT("%d"),&t.wSecond);
} else {
t.wHour = 0;
t.wMinute = 0;
t.wSecond = 0;
}
// set to default
t.wMilliseconds = 0;
t.wDayOfWeek = 0;
ret = SystemTimeToVariantTime (&t, date);
} else {
(*date) = 949998.000000;
}
return isUTC;
}
/**
* Check if the given date is in date-only format or not.
* FIXME: we should support YYYYMMDD too, without '-'.
*/
bool isDateForAllDayEventFormat(const wchar_t* stringDate) {
return (wcschr(stringDate, '-') != NULL);
}
/**
* Parse the given date, in different formats, see header for details.
*/
DATE getDATEFromString(const wchar_t *date, const wchar_t *hour) {
DATE ret = 0;
if (isDateForAllDayEventFormat(date)) {
const wchar_t *type = TEXT("START");
if(hour && wcscmp(hour, TEXT("2359")) == 0) {
type = TEXT("END");
}
systemTimeToDoubleBirthFormat(date, &ret, type);
} else {
systemTimeToDouble(date, &ret, hour);
}
return ret;
}
/*
* The method returns the file name from the complete path.
*
* @param path : the complete path
* @param filename : the filename retrieved form path
*/
void getFileName(const wchar_t* path, wchar_t* filename) {
wchar_t* p;
p = wcsrchr(path, L'\\');
if (p == NULL) {
wcscpy(filename, path);
return;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -