Calcolare il numero di giorni compresi fra due date
Per ottenere il calcolo del numero di giorni compresi fra due date, anche appartenenti ad anni diversi, è possibile adottare alcune soluzioni.
Uso delle sole risorse di Gambas
Potremo adottare le sole risorse di Gambas, come ad esempio la funzione "DateDiff()", impostando in particolare il secondo parametro attuale con la costante gb.Day nativa di Gambas: [nota 1]
Public Sub Main() Print DateDiff(Date(1964, 1, 4, 0, 0, 0, 0), Date(1969, 8, 21, 0, 0, 0, 0), gb.Day) End
Potremo anche utilizzare il Controllo grafico DateBox e in particolare la sua Proprietà ".Value", magari impostando manualmente la data sul DateBox: [nota 2]
Public Sub Button1_Click() Print DateBox2.Value - DateBox1.Value End
Uso di alcune funzioni esterne del API di Glib-2.0
Si potrà anche fare uso di alcune funzioni esterne del API di Glib-2.0.
E' necessario in tal caso avere installata nel sistema e richiamare in Gambas la libreria condivisa: "libglib-2.0.so.0.8000.2 ".
Mostriamo un esempio:
Library "libglib-2.0:0.8000.2" Public Struct GDate julian_days As Integer julian As Integer dmy As Integer day As Integer month As Integer year As Integer End Struct ' GDate * g_date_new_dmy (GDateDay day, GDateMonth month, GDateYear year) ' Allocates a GDate, initializes it to a sane state, and sets the value of the date. Private Extern g_date_new_dmy(gday As Byte, gmonth As Integer, gyear As Short) As GDate ' gint g_date_days_between (const GDate *date1, const GDate *date2) ' Computes the number of days between two dates. Private Extern g_date_days_between(date1 As GDate, date2 As GDate) As Integer ' void g_date_free (GDate *date) ' Frees a GDate returned from g_date_new(). Private Extern g_date_free(g_date As GDate) Public Sub Main() Dim gd1, gd2 As GDate Dim giorni As Integer gd1 = g_date_new_dmy(1, 5, 2004) gd2 = g_date_new_dmy(3, 5, 2004) giorni = g_date_days_between(gd1, gd2) Print giorni ' Libera la memoria precedentemente occupata da libglib-2.0: g_date_free(gd2) g_date_free(gd1) End
Note
[1] Questa soluzione è stata suggerita dal membro tornu
[2] Questa soluzione è stata suggerita dal membro Gianluigi.