static time_t LogFileDate(unsigned current_year, const TCHAR *filename) { // scan for long filename unsigned short year, month, day, num; int matches = _stscanf(filename, _T("%hu-%hu-%hu-%*7s-%hu."), &year, &month, &day, &num); if (matches == 4) { struct tm tm; tm.tm_sec = 0; tm.tm_min = 0; tm.tm_hour = num; tm.tm_mday = day; tm.tm_mon = month - 1; tm.tm_year = year - 1900; tm.tm_isdst = -1; return mktime(&tm); } TCHAR cyear, cmonth, cday, cflight; // scan for short filename matches = _stscanf(filename, _T("%c%c%c%*4s%c."), &cyear, &cmonth, &cday,&cflight); if (matches == 4) { int iyear = (int)current_year; int syear = iyear % 10; int yearzero = iyear - syear; int yearthis = IGCCharToNum(cyear) + yearzero; if (yearthis > iyear) yearthis -= 10; struct tm tm; tm.tm_sec = 0; tm.tm_min = 0; tm.tm_hour = IGCCharToNum(cflight); tm.tm_mday = IGCCharToNum(cday); tm.tm_mon = IGCCharToNum(cmonth) - 1; tm.tm_year = yearthis - 1900; tm.tm_isdst = -1; return mktime(&tm); /* YMDCXXXF.igc Y: Year, 0 to 9 cycling every 10 years M: Month, 1 to 9 then A for 10, B=11, C=12 D: Day, 1 to 9 then A for 10, B=.... C: Manuf. code = X XXX: Logger ID Alphanum F: Flight of day, 1 to 9 then A through Z */ } return 0; }
FILETIME LogFileDate(TCHAR* filename) { FILETIME ft; ft.dwLowDateTime = 0; ft.dwHighDateTime = 0; TCHAR asset[MAX_PATH+1]; SYSTEMTIME st; unsigned short year, month, day, num; int matches; // scan for long filename matches = swscanf(filename, TEXT("%hu-%hu-%hu-%7s-%hu.IGC"), &year, &month, &day, asset, &num); if (matches==5) { st.wYear = year; st.wMonth = month; st.wDay = day; st.wHour = num; st.wMinute = 0; st.wSecond = 0; st.wMilliseconds = 0; SystemTimeToFileTime(&st,&ft); return ft; } TCHAR cyear, cmonth, cday, cflight; // scan for short filename matches = _stscanf(filename, TEXT("%c%c%c%4s%c.IGC"), &cyear, &cmonth, &cday, asset, &cflight); if (matches==5) { int iyear = (int)GPS_INFO.Year; int syear = iyear % 10; int yearzero = iyear - syear; int yearthis = IGCCharToNum(cyear) + yearzero; if (yearthis > iyear) { yearthis -= 10; } st.wYear = yearthis; st.wMonth = IGCCharToNum(cmonth); st.wDay = IGCCharToNum(cday); st.wHour = IGCCharToNum(cflight); st.wMinute = 0; st.wSecond = 0; st.wMilliseconds = 0; SystemTimeToFileTime(&st,&ft); return ft; /* YMDCXXXF.IGC Y: Year, 0 to 9 cycling every 10 years M: Month, 1 to 9 then A for 10, B=11, C=12 D: Day, 1 to 9 then A for 10, B=.... C: Manuf. code = X XXX: Logger ID Alphanum F: Flight of day, 1 to 9 then A through Z */ } return ft; }