Jak zwrócić nazwę dnia tygodnia sobota?

0

Firebird 2.5.3 i środowisko Linux.

 int EXPORT test_wday(ISC_QUAD *d) {
        struct tm t;
        ISC_QUAD *data = (ISC_QUAD *) malloc(sizeof (ISC_QUAD));
        isc_decode_date(d, &t);
	    //t.tm_wday=9;
	    //mktime(&t);  //odkomentowanie odbudowuje błędną wartość tego pola pochodnego z 9 ale zawsze na 3  w przypadku soboty. 
        return  t.tm_wday;
}

DECLARE EXTERNAL FUNCTION tmwday DATE RETURNS INTEGER BY VALUE ENTRY_POINT 'test_wday' MODULE_NAME 'myudf'

Ten kod zawsze zwraca mi wartość 3 dla każdej środy (poprawnie ) i ... każdej soboty.

A tu poniższy kod w pliku wykonywalnym poprawnie zwróci 6.

#include <stdio.h>
#include <string.h>
#include <time.h>

int main(void) {
    struct tm t;
    memset(&t, 0, sizeof(t));

    t.tm_mday = 28;
    t.tm_mon = 9;
    t.tm_year = 2023-1900;

    mktime(&t);

    printf("%d\n", t.tm_wday);

    return 0;
}
0

Jest jakiś konkretny powód, dla którego używasz dziewięcioletniej wersji Firebirda?

0

Kod wygląda ok, poza tym, że wyciekasz pamięć w data. mktime() nie rusza pól tm_wday i tm_yday. Ciężko znaleźć jakąś sensowną dokumentację, ale wydaje się, że isc_decode_date używasz poprawnie (przynajmniej takie przykłady kodu zwracał google)

1 użytkowników online, w tym zalogowanych: 0, gości: 1