const char *StrToDate(const char *fmt, Date& d, const char *s, Date def) { if(*s == 0) { d = Null; return s; } d = Nvl(def, GetSysDate()); while(*fmt) { while(*s && !IsDigit(*s) && !IsAlpha(*s) && (byte)*s < 128) s++; int n; if(IsDigit(*s)) { char *q; n = strtoul(s, &q, 10); s = q; } else if(IsAlpha(*s) || (byte)*s >= 128) { if(*fmt != 'm') return NULL; String m; while(IsAlpha(*s) || (byte)*s >= 128) m.Cat(*s++); m = ToUpper(m); for(int i = 0; i < 12; i++) if(m == ToUpper(MonthName(i)) || m == ToUpper(MonName(i))) { n = i + 1; goto found; } return NULL; found: ; } else break; switch(*fmt) { case 'd': if(n < 1 || n > 31) return NULL; d.day = n; break; case 'm': if(n < 1 || n > 12) return NULL; d.month = n; break; case 'y': d.year = n; if(d.year < 25) d.year += 2000; // Check again in 2020.... // TODO: Make this automatic else if(d.year < 100) d.year += 1900; break; default: NEVER(); } fmt++; } return d.IsValid() ? s : NULL; }
void MonthTest(void) { int month; for (month = 1; month <= 12; month++) { printf("%-10s %2d\n", MonthName(month), MonthDays(month, 1996)); } }
void Insert() { TimePass::ShmMultihashmap<MonthName, int> months(SHM_FILE); if (false == months.Open()) { printf("errmsg = %s\n", TimePass::Error::GetLastErrmsg().c_str()); return; } for (int i = 0; i < 12; ++i) { months.Insert(SHM_PAIR(MonthName(t_month[i]), n_month[i])); } }
void Remove() { TimePass::ShmMultihashmap<MonthName, int> months(SHM_FILE); if (false == months.Open()) { printf("errmsg = %s\n", TimePass::Error::GetLastErrmsg().c_str()); return; } char name[10]; for (int i = 0; i < len; ++i) { months.Remove(MonthName(t_month[i])); snprintf(name, sizeof(name) - 1, "%02d", i); ToDotPs(name, &months); } }
void PrintCalendarMonth(int month, int year) { int weekday, nDays, day; printf(" %s %d\n", MonthName(month), year); printf(" Su Mo Tu We Th Fr Sa\n"); nDays = MonthDays(month, year); weekday = FirstDayOfMonth(month, year); IndentFirstLine(weekday); for (day = 1; day <= nDays; day++) { printf(" %2d", day); if (weekday == Saturday) printf("\n"); weekday = (weekday + 1) % 7; } if (weekday != Sunday) printf("\n"); }
CString CLocale::MonthName(MONTH Month) { TCHAR Buf[MAX_MONTHNAME]; MonthName(Month, Buf, MAX_MONTHNAME); return (CString(Buf)); }