Beispiel #1
0
int tests (void) {
  assert(isLeapYear(2012) == 1);
  assert(isLeapYear(2042) == 0);
  assert(isLeapYear(2000) == 1);
  assert(isLeapYear(1900) == 0);
  assert(isLeapYear(1933) == 0);

  assert(yearToDoomsday(2005) == 4);
  assert(yearToDoomsday(2006) == 5);
  assert(yearToDoomsday(2015) == 2);

  assert(dayOfWeek(6, 1, 3, 7) == 6);
  assert(dayOfWeek(6, 1, 8, 16) == 0);
  assert(dayOfWeek(6, 1, 4, 1) == 3);
  assert(dayOfWeek(5, 0, 12, 25) == 4);
  assert(dayOfWeek(6, 1, 3, 31) == 2);
 

  assert(daysToNextThursday(1856, 9, 22) == 3);
  assert(daysToNextThursday(1899, 3, 21) == 2);
  assert(daysToNextThursday(1899, 9, 14) == 7);
  assert(daysToNextThursday(1899, 11, 12) == 4);
  assert(daysToNextThursday(2048, 2, 29) == 5);
  assert(daysToNextThursday(2048, 3, 1) == 4);
  assert(daysToNextThursday(2048, 3, 2) == 3);
 
  return 0;
}
Beispiel #2
0
// ISO compliant week numbering, not traditional number, rename in KDE5 to isoWeekNumber()
// JPL still need to fully clean up here
int KCalendarSystem::weekNumber( const QDate &date, int *yearNum ) const
{
    if ( isValid( date ) ) {
        QDate firstDayWeek1, lastDayOfYear;
        int y = year( date );
        int week;
        int weekDay1, dayOfWeek1InYear;

        // let's guess 1st day of 1st week
        setDate( firstDayWeek1, y, 1, 1 );
        weekDay1 = dayOfWeek( firstDayWeek1 );

        // iso 8601: week 1  is the first containing thursday and week starts on monday
        if ( weekDay1 > 4 /*Thursday*/ ) {
            firstDayWeek1 = addDays( firstDayWeek1 , daysInWeek( date ) - weekDay1 + 1 ); // next monday
        }

        dayOfWeek1InYear = dayOfYear( firstDayWeek1 );

        // our date in prev year's week
        if ( dayOfYear( date ) < dayOfWeek1InYear ) { 
            if ( yearNum ) {
                *yearNum = y - 1;
            }
            return weeksInYear( y - 1 );
        }

        // let's check if its last week belongs to next year
        d->setAnyDate( lastDayOfYear, y + 1, 1, 1 );
        lastDayOfYear = addDays( lastDayOfYear, -1 );
        // if our date is in last week && 1st week in next year has thursday
        if ( ( dayOfYear( date ) >= daysInYear( date ) - dayOfWeek( lastDayOfYear ) + 1 )
             && dayOfWeek( lastDayOfYear ) < 4 ) {
            if ( yearNum ) {
                * yearNum = y + 1;
            }
             week = 1;
        } else {
            // To calculate properly the number of weeks from day a to x let's make a day 1 of week
            if( weekDay1 < 5 ) {
                firstDayWeek1 = addDays( firstDayWeek1, -( weekDay1 - 1 ) );
            }

            week = firstDayWeek1.daysTo( date ) / daysInWeek( date ) + 1;
        }

        return week;
    }

    return -1;
}
Beispiel #3
0
void drawEditReminder()
{	
	char str[128];
	
	setFont(font_arial_11);
	
	if(isReverseDate())
		sprintf(str,"%s, %d %s, %d", l_days[dayOfWeek(curDay, curMonth, curYear)], curDay, l_months[curMonth-1], curYear);
	else
		sprintf(str,"%s, %s %d, %d", l_days[dayOfWeek(curDay, curMonth, curYear)], l_months[curMonth-1], curDay, curYear);
	
	setColor(genericTextColor);
	bg_dispString(13,20-2,str);
}
Beispiel #4
0
std::string Date::toString(const std::string& fmt) const
{
  int year;
  unsigned month;
  unsigned day;

  get(year, month, day);

  std::string str;

  enum {
    state_0,
    state_fmt
  } state = state_0;

  for (std::string::const_iterator it = fmt.begin(); it != fmt.end(); ++it)
  {
    switch (state)
    {
      case state_0:
        if (*it == '%')
          state = state_fmt;
        else
          str += *it;
        break;

      case state_fmt:
        switch (*it)
        {
          case 'Y': appendDn(str, 4, year); break;
          case 'y': appendDn(str, 2, year % 100); break;
          case 'm': appendDn(str, 2, month); break;
          case 'd': appendDn(str, 2, day); break;
          case 'w': appendDn(str, 1, dayOfWeek()); break;
          case 'W': { int dow = dayOfWeek(); appendDn(str, 1, dow == 0 ? 7 : dow); } break;
          default:
            str += '%';
        }

        if (*it != '%')
          state = state_0;
        break;
    }
  }

  if (state == state_fmt)
    str += '%';

  return str;
}
int ExtDate::weekNumber( int *yearNum ) const
{
	// the year and week number are those of the next Sunday.
	ExtDate a_date( jd() - dayOfWeek() + 7);
	*yearNum = a_date.year();
	return 1 + int( a_date.dayOfYear()/7 );
}
Beispiel #6
0
int getDayFromTouch(int tx, int ty)
{
	uint16 z = 1;	
	uint16 x = dayOfWeek(1,curMonth,curYear);
	uint16 y = 0;
	
	while(z <= daysInMonth(curMonth-1,curYear))
	{	
		if(tx > (x*31) && tx < 21+(x*31))
		{
			if(ty > (15*y) && ty < 13+(15*y))
				return z;
		}		
		
		x++;
		if(x > 6)
		{
			x = 0;
			y++;
		}
		
		z++;
	}
	
	return -1;
}
inline QString RecordingsModel::sectionName(const QDate &modDate)
{
    auto curDate = QDate::currentDate();
    auto days = modDate.daysTo(curDate);
    if (days == 0)
    {
        return tr("Today");
    }
    if (days == 1)
    {
        return tr("Yesterday");
    }
    if (days < 7 && modDate.dayOfWeek() < curDate.dayOfWeek())
    {
        return tr("This week");
    }
    if (days < curDate.daysInMonth() && modDate.day() < curDate.day())
    {
        return tr("This month");
    }
    if (days < 183)
    {
        return tr("Last 6 months");
    }
    return tr("Older");
}
Beispiel #8
0
void PrintGregDate( date_t dt )
{
   if (!noGreg_sw)
      {
	 if (gregDateOutputFormatCode_sw == GREG_DATEFORMAT_ISO){
	    printf ("%d-%02d-%02d", dt.yy,dt.mm, dt.dd);        /* YYYY-MM-DD */
	 }
	 else
	    {
	       if( gregDateOutputFormatCode_sw == GREG_DATEFORMAT_EURO)
		  printf ("%d.%d.", dt.dd, dt.mm);        /* dd/mm/yyyy */
	       else
		  printf ("%d/%d/", dt.mm, dt.dd);        /* mm/dd/yyyy */
	       
	       if (yearDigits_sw)
		  printf ("%d", dt.yy % 100);
	       else
		  printf ("%d", dt.yy);
	    }
	 
	 if (tabs_sw)
            putchar ('\t');
	 else
            putchar (' ');
    }
    
    if (weekday_sw)
        printf ("%s, ", ShortDayNames[dayOfWeek (dt)]);
}
// Offset from January 1st to Monday of the ISO 8601's first week.
//   ex. If January 1st is Friday, such Monday is 3 days later. Returns 3.
static int offsetTo1stWeekStart(int year)
{
    int offsetTo1stWeekStart = 1 - dayOfWeek(year, 0, 1);
    if (offsetTo1stWeekStart <= -4)
        offsetTo1stWeekStart += 7;
    return offsetTo1stWeekStart;
}
int main ()
{
	int day;
	scanf( "%d", & day );
	printf( "%s\n", dayOfWeek( day ) );
	return 0;
}          
Beispiel #11
0
int daysToNextThursday(int year, int month, int day){

  int e;
  e = yearToDoomsday(year);
  int f;
  f = isLeapYear(year);
  int A;
  A = dayOfWeek (e,f,month,day);

    if(A == 0){
        return 7;
    } else if(A == 1){ 
        return 6;
    } else if(A == 2){ 
        return 5;
    } else if(A == 3){ 
        return 4;
    } else if(A == 4){ 
        return 3;
    } else if(A == 5){
        return 2;
    } 
    //else if(yearToDoomsDay == 3){ 
    return 1;
}
int KCalendarSystemHebrew::weekNumber(const TQDate& date, int * yearNum) const
{
  TQDate firstDayWeek1, lastDayOfYear;
  int y = year(date);
  int week;
  int weekDay1, dayOfWeek1InYear;

  // let's guess 1st day of 1st week
  setYMD(firstDayWeek1, y, 1, 1);
  weekDay1 = dayOfWeek(firstDayWeek1);

  // iso 8601: week 1  is the first containing thursday and week starts on
  // monday
  if (weekDay1 > 4 /*Thursday*/)
    firstDayWeek1 = addDays(firstDayWeek1 , 7 - weekDay1 + 1); // next monday

  dayOfWeek1InYear = dayOfYear(firstDayWeek1);

  if ( dayOfYear(date) < dayOfWeek1InYear ) // our date in prev year's week
  {
    if ( yearNum )
      *yearNum = y - 1;
    return weeksInYear(y - 1);
  }

  // let's check if its last week belongs to next year
  setYMD(lastDayOfYear, y + 1, 1, 1);
  lastDayOfYear = addDays(lastDayOfYear, -1);
  if ( (dayOfYear(date) >= daysInYear(date) - dayOfWeek(lastDayOfYear) + 1)
       // our date is in last week
       && dayOfWeek(lastDayOfYear) < 4) // 1st week in next year has thursday
    {
      if ( yearNum )
        *yearNum = y + 1;
      week = 1;
    }
  else
  {
   if( weekDay1 < 5 ) // To calculate properly the number of weeks
                     //  from day a to x let's make a day 1 of week
      firstDayWeek1 = addDays( firstDayWeek1, -( weekDay1 - 1));

   week = firstDayWeek1.daysTo(date) / 7 + 1;
  }

  return week;
}
Beispiel #13
0
QString KCalendarSystem::weekDayName( const QDate &date, WeekDayNameFormat format ) const
{
    if ( isValid( date ) ) {
        return weekDayName( dayOfWeek( date ), format );
    }

    return QString();
}
Beispiel #14
0
 uint8_t TimeAlarmsClass::getDigitsNow( dtUnits_t Units)
 {
   time_t time = now();
   if(Units == dtSecond) return numberOfSeconds(time);
   if(Units == dtMinute) return numberOfMinutes(time); 
   if(Units == dtHour) return numberOfHours(time);
   if(Units == dtDay) return dayOfWeek(time);
   return 255;  // This should never happen 
 }
Beispiel #15
0
void CalendarDatePrivate::ComputeDays() {
    gint month = 1;
    gint year = 1970;
    gint ndays_in_month = 31;
    gint ndays_in_prevmonth = 31;
    gint first_day = 4;
    gint row = 0;
    gint col = 0;
    gint day = 1;

    year = m_selectedYear;
    month = m_selectedMonth;

    ndays_in_month = month_length[leap(year)][month];

    first_day = dayOfWeek(year, month, 1);
    first_day = (first_day + 7 - m_weekStart) % 7;
    if (0 == first_day) {
        first_day = 7;
    }

    if (1 < month) {
        ndays_in_prevmonth = month_length[leap(year)][month - 1];
    } else {
        ndays_in_prevmonth = month_length[leap(year - 1)][12];
    }

    day = ndays_in_prevmonth - first_day + 1;
    for (col = 0; col < first_day; ++col) {
        m_day[0][col] = day;
        m_dayMonth[0][col] = MONTH_PREV;
        ++day;
    }

    row = first_day / 7;
    col = first_day % 7;
    for (day = 1; day <= ndays_in_month; ++day) {
        m_day[row][col] = day;
        m_dayMonth[row][col] = MONTH_CURRENT;

        ++col;
        if (7 == col) {
            ++row;
            col = 0;
        }
    }

    day = 1;
    for (; row <= 5; ++row) {
        for (; col <= 6; ++col) {
            m_day[row][col] = day;
            m_dayMonth[row][col] = MONTH_NEXT;
            ++day;
        }
        col = 0;
    }
}
Beispiel #16
0
void checkKiniti(char *kiniti, int *mera, int *minas, char *onoma)
{
    if (kiniti[0] != '*')
    {
        if ((*mera == 11 && *minas == 12) || strcmp(onoma, "ΧΛΟΗ") == 0)
        {
            if (dayOfWeek(*mera, *minas, current_year) != 0)
            {
                *mera = *mera + (7-(dayOfWeek(*mera, *minas, current_year)));
            }
        }
        else
        {
            *mera = easter_day + atoi(kiniti);      /* Flawfinder: ignore */
            *minas = easter_month;
        }
        while (*mera < 0)
        {
            *mera += monthDays(*minas-1, current_year);
            *minas = *minas-1;
        }
        while (*mera > monthDays(*minas, current_year))
        {
            *mera -= monthDays(*minas, current_year);
            *minas = *minas+1;
        }
        if (strcmp(onoma, "ΓΕΩΡΓΙΑ") == 0 || strcmp(onoma, "ΓΕΩΡΓΙΟΣ") == 0)
        {
            if (easter_day < 24 && easter_month < 5)
            {
                *mera = 23;
                *minas = 4;
            }
        }
        if (strcmp(onoma, "ΜΑΡΚΟΣ") == 0)
        {
            if (easter_day < 24 && easter_month < 5)
            {
                *mera = 25;
                *minas = 4;
            }
        }
    }
}
  openstudio::Date RunPeriodControlSpecialDays_Impl::getDate(const std::string& text) const
  {
    Date result;
    YearDescription yd = this->model().getUniqueModelObject<YearDescription>();

    /*
     \note  <number>/<number>  (month/day)
     \note  <number> <Month>
     \note  <Month> <number>
     \note <Nth> <Weekday> in <Month)
     \note Last <WeekDay> in <Month>
     \note <Month> can be January, February, March, April, May, June, July, August, September, October, November, December
     \note Months can be the first 3 letters of the month
     \note <Weekday> can be Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
     \note <Nth> can be 1 or 1st, 2 or 2nd, etc. up to 5(?)
    */
    boost::smatch matches;
    if (boost::regex_search(text, matches, boost::regex("(\\d+)\\s?\\/\\s?(\\d+)"))){

      std::string monthString(matches[1].first, matches[1].second);
      MonthOfYear monthOfYear(boost::lexical_cast<unsigned>(monthString));

      std::string dayOfMonthString(matches[2].first, matches[2].second);
      unsigned dayOfMonth = boost::lexical_cast<unsigned>(dayOfMonthString);

      result = yd.makeDate(monthOfYear, dayOfMonth);
      return result;
    }else if (boost::regex_search(text, matches, boost::regex("(\\d+)\\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|January|February|March|April|May|June|July|August|September|October|November|December)", boost::regex::icase))){
             
      std::string dayOfMonthString(matches[1].first, matches[1].second);
      unsigned dayOfMonth = boost::lexical_cast<unsigned>(dayOfMonthString);
      std::string monthString(matches[2].first, matches[2].second);

      result = yd.makeDate(monthOfYear(monthString), dayOfMonth);
      return result;
    }else if (boost::regex_search(text, matches, boost::regex("(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|January|February|March|April|May|June|July|August|September|October|November|December)\\s+(\\d+)", boost::regex::icase))){
          
      std::string monthString(matches[1].first, matches[1].second);
      std::string dayOfMonthString(matches[2].first, matches[2].second);
      unsigned dayOfMonth = boost::lexical_cast<unsigned>(dayOfMonthString);

      result = yd.makeDate(monthOfYear(monthString), dayOfMonth);
      return result;
    }else if (boost::regex_search(text, matches, boost::regex("(1|2|3|4|5|1st|2nd|3rd|4th|5th|Last)\\s+(Sun|Mon|Tue|Wed|Thu|Fri|Sat|Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)\\s+in\\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|January|February|March|April|May|June|July|August|September|October|November|December)", boost::regex::icase))){
               
      std::string nthString(matches[1].first, matches[1].second);
      std::string dayOfWeekString(matches[2].first, matches[2].second);
      std::string monthString(matches[3].first, matches[3].second);

      result = yd.makeDate(nthDayOfWeekInMonth(nthString), dayOfWeek(dayOfWeekString), monthOfYear(monthString));
      return result;
    }

    LOG_AND_THROW("Could not determine date for startDate = '" << text << "'");
    return Date();
  }
Beispiel #18
0
int
yearOfWeek(time_t t, bool beginOnMonday)
{
    const struct tm* tms = clocaltime(&t);
    int tm_year = tms->tm_year;

    int lastDayOfYear = dayOfYear(beginOfYear(sameTimeNextYear(t)) - 1);
    if (dayOfYear(t) < 4)
    {
        if (dayOfWeek(t, beginOnMonday) - dayOfYear(t) >= 3)
            return 1900 + tm_year - 1;
    }
    else if (dayOfYear(t) > lastDayOfYear - 4)
    {
        if (dayOfYear(t) - dayOfWeek(t, beginOnMonday) > lastDayOfYear - 4)
            return 1900 + tm_year + 1;
    }
    return 1900 + tm_year;
}
Beispiel #19
0
void DateTime::format(std::string& str, const std::string& fmt, int timeZoneDifferential)
{
    std::string::const_iterator it  = fmt.begin();
    std::string::const_iterator end = fmt.end();
    while (it != end)
    {
        if (*it == '%')
        {
            if (++it != end)
            {
                switch (*it)
                {
                case 'w': str.append(WEEKDAY_NAMES[dayOfWeek()], 0, 3); break;
                case 'W': str.append(WEEKDAY_NAMES[dayOfWeek()]); break;
                case 'b': str.append(MONTH_NAMES[month() - 1], 0, 3); break;
                case 'B': str.append(MONTH_NAMES[month() - 1]); break;
                case 'd': NumberFormatter::append0(str, (int32_t)day(), 2); break;
                case 'e': NumberFormatter::append(str, (int32_t)day()); break;
                case 'f': NumberFormatter::append(str, (int32_t)day(), 2); break;
                case 'm': NumberFormatter::append0(str, (int32_t)month(), 2); break;
                case 'n': NumberFormatter::append(str, (int32_t)month()); break;
                case 'o': NumberFormatter::append(str, (int32_t)month(), 2); break;
                case 'y': NumberFormatter::append0(str, (int32_t)year() % 100, 2); break;
                case 'Y': NumberFormatter::append0(str, (int32_t)year(), 4); break;
                case 'H': NumberFormatter::append0(str, (int32_t)hour(), 2); break;
                case 'h': NumberFormatter::append0(str, (int32_t)hourAMPM(), 2); break;
                case 'a': str.append(isAM() ? "am" : "pm"); break;
                case 'A': str.append(isAM() ? "AM" : "PM"); break;
                case 'M': NumberFormatter::append0(str, (int32_t)minute(), 2); break;
                case 'S': NumberFormatter::append0(str, (int32_t)second(), 2); break;
                case 'i': NumberFormatter::append0(str, (int32_t)millisecond(), 3); break;
                case 'c': NumberFormatter::append(str, (int32_t)millisecond()/100); break;
                case 'F': NumberFormatter::append0(str, (int32_t)millisecond()*1000 + microsecond(), 6); break;
                case 'z': tzdISO(str, timeZoneDifferential); break;
                case 'Z': tzdRFC(str, timeZoneDifferential); break;
                default:  str += *it;
                }
                ++it;
            }
        }
        else str += *it++;
    }
}
Beispiel #20
0
unsigned int CDateTime::weekOfYear(int year, unsigned int month, unsigned int day)
{
    if (!isValid(year, month, day))
    {
        return 0;
    }

    CDateTime d1(year, month, day);
    int a = dayOfWeek(year, month, day);
    d1.addDays(4 - a); // Jeudi de cette semaine

    int y1 = d1.getYear();

    CDateTime d2(y1, 1, 4);
    int b = dayOfWeek(y1, 1, 4);
    d2.addDays(1 - b); // Lundi de cette semaine

    int y2 = d2.getYear();

    if (y1 < y2)
    {
        unsigned int a1 = (isLeapYear(y1) ? 366 : 365) - dayOfYear(y1, d1.getMonth(), d1.getDay());
        unsigned int a2 = dayOfYear(y2, d2.getMonth(), d2.getDay());

        return (1 + (a1 + a2) / 7);
    }
    else if (y1 > y2)
    {
        unsigned int a1 = dayOfYear(y1, d1.getMonth(), d1.getDay());
        unsigned int a2 = (isLeapYear(y2) ? 366 : 365) - dayOfYear(y2, d2.getMonth(), d2.getDay());

        return (1 + (a1 + a2) / 7);
    }
    else
    {
        unsigned int a1 = dayOfYear(y1, d1.getMonth(), d1.getDay());
        unsigned int a2 = dayOfYear(y2, d2.getMonth(), d2.getDay());

        return (1 + (a2 > a1 ? a2 - a1 : a1 - a2) / 7);
    }
}
Beispiel #21
0
void resetScreen (void)
{
    system("clear");
    char day[10];
    Date *date = getDate(NULL);
    dayOfWeek(day, date);
    
    fprintf(stdout, "%sCalendario Spyridon%s          %s-%d/%d/%d\n%s", KBLU, KCYN, day, peekDateDay(date), peekDateMonth(date), peekDateYear(date), RESET);
    fprintf(stdout, "0-Voltar/Cancelar\n");
    
    free(date);
}
Beispiel #22
0
// NOT IMPLEMENTED BUT WOULD BE NICE !
void RTCCValue::setTimestamp(uint32_t unixTime) {
// break the given time_t into time components
// this is a more compact version of the C library localtime function
// note that year is offset from 1970 !!!

  uint8_t _year;
  uint8_t _month, _monthLength;
  uint32_t _time;
  unsigned long _days;

  _time = (uint32_t)unixTime;
  seconds(_time % 60);
  _time /= 60; // now it is minutes
  minutes(_time % 60);
  _time /= 60; // now it is hours
  hours(_time % 24);
  _time /= 24; // now it is days
  dayOfWeek(((_time + 4) % 7) + 1);  // Sunday is day 1

  _year = 0;
  _days = 0;
  while((unsigned)(_days += (LEAP_YEAR(_year) ? 366 : 365)) <= _time) {
    _year++;
  }
  year((1970 + _year) % 100); // year is offset from 1970

  _days -= LEAP_YEAR(_year) ? 366 : 365;
  _time  -= _days; // now it is days in this year, starting at 0

  _days=0;
  _month=0;
  _monthLength=0;
  for (_month=0; _month<12; _month++) {
    if (_month==1) { // february
      if (LEAP_YEAR(_year)) {
        _monthLength=29;
      } else {
        _monthLength=28;
      }
    } else {
      _monthLength = monthDays[_month];
    }

    if (_time >= _monthLength) {
      _time -= _monthLength;
    } else {
        break;
    }
  }
  month(_month + 1);  // jan is month 1
  day(_time + 1);     // day of month

}
Beispiel #23
0
int main ( void )
{
	void displayDayOfWeek ( int n, struct date input);
	int dayOfWeek ( int n );
	int formula ( struct date input );

	printf ( "Please enter a date like yyyy/mm/dd (2013/09/12):  " );
	scanf ( "%i/%i/%i", &inPutDate.year, &inPutDate.month, &inPutDate.day );

	displayDayOfWeek ( dayOfWeek ( formula ( inPutDate) ), inPutDate );
	return 0;
}	
Beispiel #24
0
QString QDate::toString() const
{
    int y, m, d;
    jul2greg( jd, y, m, d );
    QString buf = dayName(dayOfWeek());
    buf += ' ';
    buf += monthName(m);
    QString t;
    t.sprintf( " %d %d", d, y);
    buf += t;
    return buf;
}
Beispiel #25
0
  boost::optional<openstudio::model::ModelObject> ReverseTranslator::translateHoliday(const QDomElement& element, const QDomDocument& doc, openstudio::model::Model& model)
  {
		//<Name>Thanksgiving Day</Name>
		//<SpecMthd>Fourth</SpecMthd>
		//<DayOfWeek>Thursday</DayOfWeek>
		//<Month>November</Month>

		//<Name>Christmas Day</Name>
		//<SpecMthd>Date</SpecMthd>
		//<Month>December</Month>
		//<Day>25</Day>

    boost::optional<openstudio::model::ModelObject> result;

    QDomElement nameElement = element.firstChildElement("Name");
    QDomElement specificationMethodElement = element.firstChildElement("SpecMthd");
    OS_ASSERT(!nameElement.isNull());
    OS_ASSERT(!specificationMethodElement.isNull());

    if (specificationMethodElement.text() == "Date"){
      QDomElement monthElement = element.firstChildElement("Month");
      QDomElement dayElement = element.firstChildElement("Day");
      OS_ASSERT(!monthElement.isNull());
      OS_ASSERT(!dayElement.isNull());

      MonthOfYear monthOfYear(toString(monthElement.text()));
      unsigned day = dayElement.text().toUInt();

      result = model::RunPeriodControlSpecialDays(monthOfYear, day, model);
      result->setName(escapeName(nameElement.text()));

    }else{
      QDomElement dayOfWeekElement = element.firstChildElement("DayOfWeek");
      QDomElement monthElement = element.firstChildElement("Month");
      OS_ASSERT(!dayOfWeekElement.isNull());
      OS_ASSERT(!monthElement.isNull());

      // fifth is treated equivalently to last
      std::string specificationMethod = toString(specificationMethodElement.text());
      if (specificationMethod == "Last"){
        specificationMethod = "Fifth";
      }

      NthDayOfWeekInMonth nth(specificationMethod);
      DayOfWeek dayOfWeek(toString(dayOfWeekElement.text()));
      MonthOfYear monthOfYear(toString(monthElement.text()));

      result = model::RunPeriodControlSpecialDays(nth, dayOfWeek, monthOfYear, model);
      result->setName(escapeName(nameElement.text()));
    }

    return result;
  }
Beispiel #26
0
static void lastWeekdayOfMonth(const int Y, const int M, const int weekday, Date *theDate) {
	int curWeekday;

	theDate->day = numDaysInMonth(M, Y);
	theDate->month = M;
	theDate->year = Y;

	curWeekday = dayOfWeek(theDate);
	while (curWeekday != weekday) {
		theDate->day--;
		curWeekday = (curWeekday+6)%7;
	}
}
Beispiel #27
0
int
weekOfYear(time_t t, bool beginOnMonday)
{
    /* The  ISO 8601:1988 week number of the current year as a decimal
     * number, range 1 to 53, where  week  1 is  the first week that has at
     * least 4 days in the current year, and with Monday as the first day
     * of the week. This is also compliant with DIN 1355. */
    uint week = 0;
    uint weekday1Jan = dayOfWeek(beginOfYear(t), beginOnMonday);
    const struct tm* tms = clocaltime(&t);
    int days = tms->tm_yday;

    if (weekday1Jan > 3)
        days = days - (7 - weekday1Jan);
    else
        days = days + weekday1Jan;

    if (days < 0)
        if ((weekday1Jan == 4) ||
            (dayOfWeek(beginOfYear(beginOfYear(t) - 1), beginOnMonday) == 3))
            week = 53;
        else
            week = 52;
    else
        week = days / 7 + 1;

    if ((days > 360) && (week > 52))
    {
        if (weekday1Jan == 3)
            week = 53;
        else if (dayOfWeek(sameTimeNextYear(beginOfYear(t)),
                           beginOnMonday) == 4)
            week = 53;
        else
            week = 1;
    }

    return week;
}
Beispiel #28
0
const std::string Date::toString (
  const std::string& format /*= "m/d/Y" */) const
{
  // Making this local copy seems to fix a bug.  Remove the local copy and
  // you'll see segmentation faults and all kinds of gibberish.
  std::string localFormat = format;

  char buffer[12];
  std::string formatted;
  for (unsigned int i = 0; i < localFormat.length (); ++i)
  {
    int c = localFormat[i];
    switch (c)
    {
    case 'm': sprintf (buffer, "%d",   this->month ());                        break;
    case 'M': sprintf (buffer, "%02d", this->month ());                        break;
    case 'd': sprintf (buffer, "%d",   this->day ());                          break;
    case 'D': sprintf (buffer, "%02d", this->day ());                          break;
    case 'y': sprintf (buffer, "%02d", this->year () % 100);                   break;
    case 'Y': sprintf (buffer, "%d",   this->year ());                         break;
    case 'a': sprintf (buffer, "%.3s", Date::dayName (dayOfWeek ()).c_str ()); break;
    case 'A': sprintf (buffer, "%s",   Date::dayName (dayOfWeek ()).c_str ()); break;
    case 'b': sprintf (buffer, "%.3s", Date::monthName (month ()).c_str ());   break;
    case 'B': sprintf (buffer, "%.9s", Date::monthName (month ()).c_str ());   break;
    case 'V': sprintf (buffer, "%02d", Date::weekOfYear (Date::dayOfWeek (context.config.get ("weekstart")))); break;
    case 'h': sprintf (buffer, "%d",   this->hour ());                         break;
    case 'H': sprintf (buffer, "%02d", this->hour ());                         break;
    case 'N': sprintf (buffer, "%02d", this->minute ());                       break;
    case 'S': sprintf (buffer, "%02d", this->second ());                       break;
    case 'j': sprintf (buffer, "%d",   this->dayOfYear ());                    break;
    case 'J': sprintf (buffer, "%03d", this->dayOfYear ());                    break;
    default:  sprintf (buffer, "%c",   c);                                     break;
    }

    formatted += buffer;
  }

  return formatted;
}
Beispiel #29
0
void MainWindow::on_writeButton_clicked()
{
    QString dt = ui->dateEdit->date().toString("yyyy-MM-dd");
    int id = ui->dateEdit->date().toJulianDay() - 2455711;
    QString month(QDate::longMonthName(ui->dateEdit->date().month()));
    int day = ui->dateEdit->date().day();
    int year = ui->dateEdit->date().year();
    QString dayOfWeek(QDate::longDayName(ui->dateEdit->date().dayOfWeek()));
    QString entry = ui->textEdit->toPlainText();
    //qDebug() << "id" << id << "date" << dt << "month" << month
    //        << "day" << day << "year" << year << "dayOfWeek" << dayOfWeek;
    db->writeRecord(id, dt, month,day, year, dayOfWeek, entry);
}
Beispiel #30
0
// Finding out how many days until next Thursday?
	// eg for 16 March 2011 (2011,3,16) the function will return 1
	// eg for 17 March 2011 (2011,3,17) the funciton will return 7
int daysNextThursday(int year, int month, int day) {
	int doomsday = yearToDoomsday (year);
	int leapYear = isLeapYear (year);
	int weekDay = dayOfWeek (doomsday, leapYear, month, day);
	// When calling dayOfWeek, we need to do know:
		// What the DOOMSDAY of that year is (don't know / need calculation)
		// If the year is a LEAPYEAR or not (don't know / need calculation)
		// What the MONTH of the date is (already parsed / given by user asking the qn)
		// What the DAY of the date is (already parsed / given by user asking the qn)

	int daysToThursday = "SOME PRETTY SIMPLE CALCULATION;"

	return daysToThursday;
}