DateTime

 view release on metacpan or  search on metacpan

DateTime.xs  view on Meta::CPAN

    IV extra;

    PREINIT:
        IV y, m;
        IV c;
        IV quarter;
        IV yadj = 0;
        IV dow, doy, doq;
        IV rd_days;

    PPCODE:
        rd_days = d;

        d += MARCH_1;

        if (d <= 0) {
            yadj = -1 * (((-1 * d) / DAYS_PER_400_YEARS) + 1);
            d -= yadj * DAYS_PER_400_YEARS;
        }

        /* c is century */

DateTime.xs  view on Meta::CPAN


void
_ymd2rd(self, y, m, d)
    IV y;
    IV m;
    IV d;

    PREINIT:
        IV adj;

    PPCODE:
        if (m <= 2) {
            adj = (14 - m) / 12;
            y -= adj;
            m += 12 * adj;
        } else if (m > 14) {
            adj = (m - 3) / 12;
            y += adj;
            m -= 12 * adj;
        }

DateTime.xs  view on Meta::CPAN


void
_seconds_as_components(self, secs, utc_secs = 0, secs_modifier = 0)
    IV secs;
    IV utc_secs;
    IV secs_modifier;

    PREINIT:
        IV h, m, s;

    PPCODE:
        secs -= secs_modifier;

        h = secs / 3600;
        secs -= h * 3600;

        m = secs / 60;

        s = secs - (m * 60);

        if (utc_secs >= SECONDS_PER_DAY) {

DateTime.xs  view on Meta::CPAN

        mPUSHi(h);
        mPUSHi(m);
        mPUSHi(s);

#ifdef dt_isfinite
void
_normalize_tai_seconds(self, days, secs)
    SV* days;
    SV* secs;

    PPCODE:
        if (dt_isfinite(SvNV(days)) && dt_isfinite(SvNV(secs))) {
            IV d = SvIV(days);
            IV s = SvIV(secs);
            IV adj;

            if (s < 0) {
                adj = (s - (SECONDS_PER_DAY - 1)) / SECONDS_PER_DAY;
            } else {
                adj = s / SECONDS_PER_DAY;
            }

DateTime.xs  view on Meta::CPAN


            sv_setiv(days, (IV) d);
            sv_setiv(secs, (IV) s);
        }

void
_normalize_leap_seconds(self, days, secs)
    SV* days;
    SV* secs;

    PPCODE:
        if (dt_isfinite(SvNV(days)) && dt_isfinite(SvNV(secs))) {
            IV d = SvIV(days);
            IV s = SvIV(secs);
            IV day_length;

            while (s < 0) {
                SET_DAY_LENGTH(d - 1, day_length);

                s += day_length;
                d--;

DateTime.xs  view on Meta::CPAN

        }

#endif /* ifdef dt_isfinite */

void
_time_as_seconds(self, h, m, s)
    IV h;
    IV m;
    IV s;

    PPCODE:
        EXTEND(SP, 1);
        mPUSHi(h * 3600 + m * 60 + s);

void
_is_leap_year(self, y)
    IV y;

    PPCODE:
        EXTEND(SP, 1);
        mPUSHi(_real_is_leap_year(y));

void
_day_length(self, utc_rd)
    IV utc_rd;

    PPCODE:
        IV day_length;
        SET_DAY_LENGTH(utc_rd, day_length);

        EXTEND(SP, 1);
        mPUSHi(day_length);

void
_day_has_leap_second(self, utc_rd)
    IV utc_rd;

    PPCODE:
        IV day_length;
        SET_DAY_LENGTH(utc_rd, day_length);

        EXTEND(SP, 1);
        mPUSHi(day_length > 86400 ? 1 : 0);

void
_accumulated_leap_seconds(self, utc_rd)
    IV utc_rd;

    PPCODE:
        IV leap_seconds;
        SET_LEAP_SECONDS(utc_rd, leap_seconds);

        EXTEND(SP, 1);
        mPUSHi(leap_seconds);



( run in 0.570 second using v1.01-cache-2.11-cpan-5511b514fd6 )