Esempio n. 1
0
static void
normalize_struct_tm (struct tm* time)
{
     gint year = time->tm_year + 1900;
     gint last_day;

     /* Gregorian_date throws if it gets an out-of-range year
      * so clamp year into gregorian_date's range.
      */
     if (year < 1400) year += 1400;
     if (year > 9999) year %= 10000;

     normalize_time_component (&(time->tm_sec), &(time->tm_min), 60, 0);
     normalize_time_component (&(time->tm_min), &(time->tm_hour), 60, 0);
     normalize_time_component (&(time->tm_hour), &(time->tm_mday), 24, 0);
     normalize_month (&(time->tm_mon), &year);

     // auto month_in_range = []int (int m){ return (m + 12) % 12; }
     while (time->tm_mday < 1)
     {
         normalize_month (&(--time->tm_mon), &year);
         last_day = gnc_date_get_last_mday (time->tm_mon, year);
         time->tm_mday += last_day;
     }
     last_day = gnc_date_get_last_mday (time->tm_mon, year);
     while (time->tm_mday > last_day)
     {
          time->tm_mday -= last_day;
          normalize_month(&(++time->tm_mon), &year);
          last_day = gnc_date_get_last_mday (time->tm_mon, year);
     }
     time->tm_year = year - 1900;
}
Esempio n. 2
0
static void
normalize_month(int *month, int *year)
{
    ++(*month);
    normalize_time_component(month, year, 12, 1);
    --(*month);
}
Esempio n. 3
0
static void
normalize_struct_tm (struct tm* time)
{
     gint year = time->tm_year + 1900;
     gint last_day;
     time64 secs;

     ++time->tm_mon;

     normalize_time_component (&(time->tm_sec), &(time->tm_min), 60, 0);
     normalize_time_component (&(time->tm_min), &(time->tm_hour), 60, 0);
     normalize_time_component (&(time->tm_hour), &(time->tm_mday), 24, 0);
     normalize_time_component (&(time->tm_mon), &year, 12, 1);
     while (time->tm_mday < 1)
     {
	  last_day = gnc_date_get_last_mday (normalize_month (--time->tm_mon), year);
	  time->tm_mday += last_day;
	  normalize_time_component (&(time->tm_mon), &year, 12, 1);
     }
     last_day = gnc_date_get_last_mday (normalize_month (time->tm_mon), year);
     while (time->tm_mday > last_day)
     {
	  ++time->tm_mon;
	  time->tm_mday -= last_day;
	  normalize_time_component (&(time->tm_mon), &year, 12, 1);
	  last_day = gnc_date_get_last_mday (normalize_month (time->tm_mon), year);
     }
     time->tm_year = year - 1900;
}