Calcolare il numero di giorni compresi fra due date

Da Gambas-it.org - Wikipedia.
Versione del 13 feb 2018 alle 16:19 di Vuott (Discussione | contributi) (Creata pagina con "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 G...")

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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( )": [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 l'Oggetto "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 dinamica condivisa: "libglib-2.0"

Mostriamo un esempio:

Library "libglib-2.0"

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, 1964)
  gd2 = g_date_new_dmy(3, 5, 1964)
  
  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.