Exemple #1
0
DateTime::DateTime(int year, int month, int day, int hour,
                   int minute, int second, int millisecond, int microsecond)
    : m_year(year)
    , m_month(month)
    , m_day(day)
    , m_hour(hour)
    , m_minute(minute)
    , m_second(second)
    , m_millisecond(millisecond)
    , m_microsecond(microsecond)
{
    FIRTEX_ASSERT2(year >= 0 && year <= 9999);
    FIRTEX_ASSERT2(month >= 1 && month <= 12);
    FIRTEX_ASSERT2(day >= 1 && day <= daysOfMonth(year, month));
    FIRTEX_ASSERT2(hour >= 0 && hour <= 23);
    FIRTEX_ASSERT2(minute >= 0 && minute <= 59);
    FIRTEX_ASSERT2(second >= 0 && second <= 59);
    FIRTEX_ASSERT2(millisecond >= 0 && millisecond <= 999);
    FIRTEX_ASSERT2(microsecond >= 0 && microsecond <= 999);

    m_utcTime = toUtcTime(toJulianDay(year, month, day)) + 
                10*(hour*Timespan::HOURS + minute*Timespan::MINUTES + 
                    second*Timespan::SECONDS + 
                    millisecond*Timespan::MILLISECONDS + microsecond);
}
Exemple #2
0
DateTime& DateTime::assign(int year, int month, int day, int hour,
                           int minute, int second, int millisecond,
                           int microsecond)
{
    FIRTEX_ASSERT2(year >= 0 && year <= 9999);
    FIRTEX_ASSERT2(month >= 1 && month <= 12);
    FIRTEX_ASSERT2(day >= 1 && day <= daysOfMonth(year, month));
    FIRTEX_ASSERT2(hour >= 0 && hour <= 23);
    FIRTEX_ASSERT2(minute >= 0 && minute <= 59);
    FIRTEX_ASSERT2(second >= 0 && second <= 59);
    FIRTEX_ASSERT2(millisecond >= 0 && millisecond <= 999);
    FIRTEX_ASSERT2(microsecond >= 0 && microsecond <= 999);

    m_utcTime     = toUtcTime(toJulianDay(year, month, day)) + 
                    10*(hour*Timespan::HOURS + minute*Timespan::MINUTES +
                            second*Timespan::SECONDS +
                            millisecond*Timespan::MILLISECONDS + microsecond);
    m_year        = year;
    m_month       = month;
    m_day         = day;
    m_hour        = hour;
    m_minute      = minute;
    m_second      = second;
    m_millisecond = millisecond;
    m_microsecond = microsecond;

    return *this;
}
Exemple #3
0
int DateTime::dayOfYear() const
{
	int doy = 0;
	for (int month = 1; month < _month; ++month)
		doy += daysOfMonth(_year, month);
	doy += _day;
	return doy;
}
Exemple #4
0
void DateTime::normalize()
{
	checkLimit(_microsecond, _millisecond, 999);
	checkLimit(_millisecond, _second, 999);
	checkLimit(_second, _minute, 59);
	checkLimit(_minute, _hour, 59);
	checkLimit(_hour, _day, 23);

	if (_day > daysOfMonth(_year, _month))
	{
		_day -= daysOfMonth(_year, _month);
		if (++_month > 12)
		{
			++_year;
			_month -= 12;
		}
	}
}
Exemple #5
0
void DateTime::normalize()
{
    checkLimit(m_microsecond, m_millisecond, 1000);
    checkLimit(m_millisecond, m_second, 1000);
    checkLimit(m_second, m_minute, 60);
    checkLimit(m_minute, m_hour, 60);
    checkLimit(m_hour, m_day, 24);

    if (m_day > daysOfMonth(m_year, m_month))
    {
        m_day -= daysOfMonth(m_year, m_month);
        if (++m_month > 12)
        {
            ++m_year;
            m_month -= 12;
        }
    }
}
Exemple #6
0
bool Date::isValid(Date date) {
  if (date.year_ > 9999 || date.year_ <1000) return false;
  bool judge = isLeapYear(date.year_);
  if (date.month_ > 12 || date.month_ < 1) return false;
  if (date.day_ > daysOfMonth(date.month_, judge) ||
      date.day_ < 1) return false;
  if (date.hour_ > 23 || date.hour_ < 0) return false;
  if (date.minute_ > 59 || date.minute_ < 0) return false;
  return true;
}
Exemple #7
0
bool DateTime::isValid(int year, int month, int day, int hour, int minute, int second, int millisecond, int microsecond)
{
	return
		(year >= 0 && year <= 9999) &&
		(month >= 1 && month <= 12) &&
		(day >= 1 && day <= daysOfMonth(year, month)) &&
		(hour >= 0 && hour <= 23) &&
		(minute >= 0 && minute <= 59) &&
		(second >= 0 && second <= 59) &&
		(millisecond >= 0 && millisecond <= 999) &&
		(microsecond >= 0 && microsecond <= 999);
}
Exemple #8
0
void DateTime::computeDaytime()
{
    Timespan span(_utcTime/10);
    int hour = int((span/HOURS) % 24);
    // Due to double rounding issues, the previous call to computeGregorian()
    // may have crossed into the next or previous day. We need to correct that.
    if (hour == 23 && _hour == 0)
    {
        _day--;
        if (_day == 0)
        {
            _month--;
            if (_month == 0)
            {
                _month = 12;
                _year--;
            }
            _day = daysOfMonth(_year, _month);
        }
    }
    else if (hour == 0 && _hour == 23)
    {
        _day++;
        if (_day > daysOfMonth(_year, _month))
        {
            _month++;
            if (_month > 12)
            {
                _month = 1;
                _year++;
            }
            _day = 1;
        }
    }
    _hour        = hour;
    _minute      = short((span/MINUTES) % 60);
    _second      = short((span/SECONDS) % 60);
    _millisecond = short((span/MILLISECONDS) % 1000);
    _microsecond = short(span/1000);
}
Exemple #9
0
uint8_t tick(uint8_t val)
{
	uint8_t save_t = false;
	uint8_t ret = 0;
	switch (val)
	{
	case second:
		date.second++;
		ret = date.second;
		if (date.second >= 60)
		{
			date.second = 0;
		case minute:
			date.minute++;
			save_t = true;
			ret = date.second;
			if (date.minute >= 60)
			{
				date.minute = 0;
			case hour:
				date.hour++;
				checkDST();
				ret = date.hour;
				if (date.hour >= 24)
				{
					date.hour = 0;
				case day:
					date.day++;
					ret = date.hour;
					if (date.day >= daysOfMonth(date.month, date.year))
					{
						date.day = 1;
					case month:
						date.month++;
						ret = date.hour;
						if (++date.month > 12)
						{
							date.month = 1;
						case year:
							++date.year;
						}
					}
				}
			}
		}
	}
	if (save_t)
	{
		saveTime(date);
	}
	return ret;
}
Exemple #10
0
void DateTime::computeGregorian(double julianDay)
{
	double z    = std::floor(julianDay - 1721118.5);
	double r    = julianDay - 1721118.5 - z;
	double g    = z - 0.25;
	double a    = std::floor(g / 36524.25);
	double b    = a - std::floor(a/4);
	_year       = short(std::floor((b + g)/365.25));
	double c    = b + z - std::floor(365.25*_year);
	_month      = short(std::floor((5*c + 456)/153));
	double dday = c - std::floor((153.0*_month - 457)/5) + r;
	_day        = short(dday);
	if (_month > 12)
	{
		++_year;
		_month -= 12;
	}
	r      *= 24;
	_hour   = short(std::floor(r));
	r      -= std::floor(r);
	r      *= 60;
	_minute = short(std::floor(r));
	r      -= std::floor(r);
	r      *= 60;
	_second = short(std::floor(r));
	r      -= std::floor(r);
	r      *= 1000;
	_millisecond = short(std::floor(r));
	r      -= std::floor(r);
	r      *= 1000;
	_microsecond = short(r + 0.5);

	normalize();

	poco_assert_dbg (_month >= 1 && _month <= 12);
	poco_assert_dbg (_day >= 1 && _day <= daysOfMonth(_year, _month));
	poco_assert_dbg (_hour >= 0 && _hour <= 23);
	poco_assert_dbg (_minute >= 0 && _minute <= 59);
	poco_assert_dbg (_second >= 0 && _second <= 59);
	poco_assert_dbg (_millisecond >= 0 && _millisecond <= 999);
	poco_assert_dbg (_microsecond >= 0 && _microsecond <= 999);
}
Exemple #11
0
DateTime::DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int microsecond):
	_year(year),
	_month(month),
	_day(day),
	_hour(hour),
	_minute(minute),
	_second(second),
	_millisecond(millisecond),
	_microsecond(microsecond)
{
	poco_assert (year >= 0 && year <= 9999);
	poco_assert (month >= 1 && month <= 12);
	poco_assert (day >= 1 && day <= daysOfMonth(year, month));
	poco_assert (hour >= 0 && hour <= 23);
	poco_assert (minute >= 0 && minute <= 59);
	poco_assert (second >= 0 && second <= 59);
	poco_assert (millisecond >= 0 && millisecond <= 999);
	poco_assert (microsecond >= 0 && microsecond <= 999);
	
	_utcTime = toUtcTime(toJulianDay(year, month, day)) + 10*(hour*Timespan::HOURS + minute*Timespan::MINUTES + second*Timespan::SECONDS + millisecond*Timespan::MILLISECONDS + microsecond);
}
Exemple #12
0
DateTime& DateTime::assign(int year, int month, int day, int hour, int minute, int second, int millisecond, int microsecond)
{
    pi_assert_dbg (year >= 0 && year <= 9999);
    pi_assert_dbg (month >= 1 && month <= 12);
    pi_assert_dbg (day >= 1 && day <= daysOfMonth(year, month));
    pi_assert_dbg (hour >= 0 && hour <= 23);
    pi_assert_dbg (minute >= 0 && minute <= 59);
    pi_assert_dbg (second >= 0 && second <= 59);
    pi_assert_dbg (millisecond >= 0 && millisecond <= 999);
    pi_assert_dbg (microsecond >= 0 && microsecond <= 999);

    _utcTime     = toUtcTime(toJulianDay(year, month, day)) +
            10*(hour*HOURS + minute*MINUTES + second*SECONDS + millisecond*MILLISECONDS + microsecond);
    _year        = year;
    _month       = month;
    _day         = day;
    _hour        = hour;
    _minute      = minute;
    _second      = second;
    _millisecond = millisecond;
    _microsecond = microsecond;

    return *this;
}