Ho scritto un po' di codice usando le funzionalità degli ambienti Unix. SHELL serve a questo ;-)
' Gambas module file
PUBLIC SUB Main()
DIM sEseguibileDate AS String
DIM sConverter AS String
DIM sProgressivoSecondi, sData AS String
'Trovo nel sistema l'eseguibile di date, per evitare possibili alias
'dell'utente.
SHELL "which date" TO sEseguibileDate
'Tramite date posso ottenere qualsiasi data in secondi.
'Tolgo la newline dalla risposta di which e aggiungo
'l'opzione --date con la data di oggi [b](anno-mese-giorno)[/b] e
'+%s per avere il progressivo in secondi.
sEseguibileDate = Trim$(sEseguibileDate) & " --date 2009-06-20 +%s"
SHELL sEseguibileDate TO sProgressivoSecondi
'Ho la data progressiva in secondi (dal 1970)
PRINT "La data 20-06-2009 in secondi: " & sProgressivoSecondi
'Voglio recuperare la data
'Uso Trim$ per togliere la newline.
sConverter = "echo " & Trim$(sProgressivoSecondi) & " | awk '{print strftime(\"%d/%m/%Y\",$1)}'"
SHELL sConverter TO sData
sData = Trim$(sData)
PRINT sData
PRINT "-------------------------------"
'Rifaccio con una data del passato.
SHELL "which date" TO sEseguibileDate
sEseguibileDate = Trim$(sEseguibileDate) & " --date 1902-01-01 +%s"
SHELL sEseguibileDate TO sProgressivoSecondi
PRINT "Progressivo data 01-01-1902: " & sProgressivoSecondi
sConverter = "echo " & Trim$(sProgressivoSecondi) & " | awk '{print strftime(\"%d/%m/%Y\",$1)}'"
SHELL sConverter TO sData
sData = Trim$(sData)
PRINT sData
END
Cosa fa il codice:
1) ti da il progressivo in secondi di una data tra il 1902 e il 2037 (se devi
salvare date pre e post per ora non puoi farlo - forse sulle macchine a 64 bit - è il bug noto)
2) da quel progressivo ti ritrova la data
Ho scritto la cosa senza GUI solo per farti vedere come funziona. Se vuoi
un altro formato al posto di gg/mm/yyyy guarda 'man strftime' e
sostituisci print strftime(\"%d/%m/%Y\" con quello che ti pare . Il codice è commentato. Nella seconda parte (con la data vecchia) le cose sono ripetute,
ma naturalmente basta scrivere le due funzioni (m'abbutava :-) ).Ciao.
EDIT: il sito toglie dei backslash di protezione. Usa il codice dell'allegato!
ma perche non ubi le funzione dateadd per il tuo programma?
Result = DateAdd ( Date as Date , Period AS Integer , Count AS Integer ) AS Date