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;
}