[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[LDM #QMJ-238932]: pqact dates still wrong

This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.


  • Subject: [LDM #QMJ-238932]: pqact dates still wrong
  • Date: Wed, 02 May 2007 15:59:15 -0600

Harry,

I think I've fixed the function that does the data
substitution in the "pqact" utility.  It allows
dates one day in the future to one month minus
one day in the past.

I've attached a test-suite.  Can you think of any
other test cases?

Regards,
Steve Emmerson

Ticket Details
===================
Ticket ID: QMJ-238932
Department: Support LDM
Priority: Normal
Status: On Hold
int
main()
{
    char        buf[128];
    time_t      time = 0;
    struct tm   tm;
    time_t      feb28;
    time_t      feb28leap;
    time_t      feb29leap;
    time_t      mar01;
    time_t      dec31;
    time_t      jan01;

    (void)openulog("date_sub", (LOG_CONS|LOG_PID), LOG_LDM, "-");

    date_sub("(01:yyyy)-(01:mm)-(01:dd)", buf, 0);
    assert(strcmp(buf, "1970-01-01") == 0);

    tm = *gmtime(&time);
    tm.tm_mon = 1;
    tm.tm_mday = 28;
    tm.tm_sec -= timezone;
    feb28 = mktime(&tm);

    date_sub("(01:yyyy)-(01:mm)-(01:dd)", buf, feb28);
    assert(strcmp(buf, "1970-03-01") == 0);

    date_sub("(02:yyyy)-(02:mm)-(02:dd)", buf, feb28);
    assert(strcmp(buf, "1970-02-02") == 0);

    tm = *gmtime(&time);
    tm.tm_year = 72;
    tm.tm_mon = 1;
    tm.tm_mday = 29;
    tm.tm_sec -= timezone;
    feb29leap = mktime(&tm);

    date_sub("(01:yyyy)-(01:mm)-(01:dd)", buf, feb29leap);
    assert(strcmp(buf, "1972-03-01") == 0);

    date_sub("(02:yyyy)-(02:mm)-(02:dd)", buf, feb29leap);
    assert(strcmp(buf, "1972-02-02") == 0);

    date_sub("(28:yyyy)-(28:mm)-(28:dd)", buf, feb29leap);
    assert(strcmp(buf, "1972-02-28") == 0);

    tm = *gmtime(&time);
    tm.tm_year = 72;
    tm.tm_mon = 1;
    tm.tm_mday = 28;
    tm.tm_sec -= timezone;
    feb28leap = mktime(&tm);

    date_sub("(01:yyyy)-(01:mm)-(01:dd)", buf, feb28leap);
    assert(strcmp(buf, "1972-02-01") == 0);

    date_sub("(29:yyyy)-(29:mm)-(29:dd)", buf, feb28leap);
    assert(strcmp(buf, "1972-02-29") == 0);

    tm = *gmtime(&time);
    tm.tm_mon = 2;
    tm.tm_mday = 01;
    tm.tm_sec -= timezone;
    mar01 = mktime(&tm);

    date_sub("(28:yyyy)-(28:mm)-(28:dd)", buf, mar01);
    assert(strcmp(buf, "1970-02-28") == 0);

    date_sub("(27:yyyy)-(27:mm)-(27:dd)", buf, mar01);
    assert(strcmp(buf, "1970-02-27") == 0);

    tm = *gmtime(&time);
    tm.tm_mon = 11;
    tm.tm_mday = 31;
    tm.tm_sec -= timezone;
    dec31 = mktime(&tm);

    date_sub("(01:yyyy)-(01:mm)-(01:dd)", buf, dec31);
    assert(strcmp(buf, "1971-01-01") == 0);

    date_sub("(02:yyyy)-(02:mm)-(02:dd)", buf, dec31);
    assert(strcmp(buf, "1970-12-02") == 0);

    tm = *gmtime(&time);
    tm.tm_year = 71;
    tm.tm_mon = 0;
    tm.tm_mday = 1;
    tm.tm_sec -= timezone;
    jan01 = mktime(&tm);

    date_sub("(01:yyyy)-(01:mm)-(01:dd)", buf, jan01);
    assert(strcmp(buf, "1971-01-01") == 0);

    date_sub("(31:yyyy)-(31:mm)-(31:dd)", buf, jan01);
    assert(strcmp(buf, "1970-12-31") == 0);
}