Manipolare ora e data

Vediamo oggi come manipolare ora e data in Sage X3.

Per ottenere la data corrente in una variabile Date si usa la funzione date$.
Allo stesso modo per avere data e ora correnti in una variabile Datetime si usa la funzione datetime$ (solo dalla V7).
La forma canonica per rappresentare data e ora con una stringa è:

YYYY-MM-DDThh:mm:ssZ           #attenzione alle lettere "in più" T e Z

In genere data e ora hanno formato “YYYY-MM-DDThh:mm:ss”.

Va ricordata anche l’esistenza della variabile adxdcs che contiene l’anno discriminante per determinare il secolo di riferimento.
Se adxdcs=30, il valore 29 sarà considerato 2029, il 31 sarà considerato 1931.

Queste le istruzioni disponibili:

num$(date$)                   #Per ottenere come stringa la data odierna
num$(time$)                   #Per ottenere come stringa l'ora corrente
num$(datetime$)               #Per ottenere come stringa canonica la data e ora odierna
gdat$(DAY,MONTH,YEAR)         #Per ottenere una data dati giorno, mese e anno
gdatetime$(str)               #Per ottenere una variabile Datetime da una stringa in forma canonica
year(data)                    #Per ottenere l'anno di una data
month(data)                   #Per ottenere il numero del mese di una data
month$(data)                  #Per ottenere il nome del mese di una data nella lingua corrente
day(data)                     #Per ottenere il numero del giorno del mese (1-31)
day$(data)                    #Per ottenere il nome del giorno della settimana
dayn(data)                    #Per ottenere il numero del giorno della settimana (1=lunedì, 7=domenica)
week(data)                    #Per ottenere il numero della settimana (1-53)
aweek(settimana,anno)         #Per ottenere il primo giorno (lunedì) della settimana specificata
nday(data)                    #Per ottenere il numero di giorni passati dal 1 gennaio 1600
nday$(NUM)                    #Per ottenere una data successiva di NUM giorni dal 1 gennaio 1600
eomonth(data)                 #Per ottenere l'ultimo giorno del mese di una data
addmonth(data,mesi)           #Per ottenere una data sommando n mesi alla data specificata

Si possono eseguire anche delle semplici operazioni:

Local Date DATA
DATA=[1/2/2015]+5        #DATA conterrà [06/02/2015]
DATA=[1/2/2015]-1        #DATA conterrà [31/01/2015]

O fare una conversione implicita da data a testo:

Local Char DATA_STR(30)                 # dichiaro una stringa
Local Date DATA                         # dichiaro una data
DATA=[31/12/2019]                       # imposto una data iniziale
DATA_STR = DATA                         # conversione implicita: DATA_STR = "20191231"

Altro esempio:

Local date LASTDATE
LASTDATE = eomonth([1/2/2015])
Infbox num$(LASTDATE)           #visualizzerà la data [28/02/2015]

Per ottenere una data come stringa con formato a piacere:

format$("D:YYYYMMDD[_]hhmmss",date$)   

Il 31 dicembre 2018 alle 12.30 e 56 secondi corrisponderà a “20181231_123056”.

Notare che per inserire uno spazio o altri elementi costanti si usano le parentesi quadre:
FORMATO = "DD[ ]MM[ ]YY"

Per ottenere data e ora come stringa formattata si può usare anche usare AFNC.FDH.
Con questa chiamata usa la formattazione contenuta nella variabile globale GFMDAT.
Supponiamo oggi sia il 19 gennaio 2018, e GFMDAT contenga “DD[/]MM[/]YY”:

func AFNC.FDH(date$,"121531")          # restituisce "19/01/18 12:15:31"
func AFNC.FDH(date$,"")                # restituisce "19/01/18 17:08:27"
func AFNC.FDH(date$,"15:32")           # restituisce "19/01/18 15:32:00"
func AFNC.FDH(date$,"15")              # restituisce "19/01/18 15:00:00"
func AFNC.FDH(date$,"15:")             # restituisce "19/01/18 15:00:00"
func AFNC.FDH(date$,"stringa-errata")  # restituisce "19/01/18         "
func AFNC.FDH(date$+1,"x")             # restituisce "20/01/18         "

Va ricordato che ci sono diverse variabili globali contenenti stringhe di formattazione,
tutte preimpostate in base alle varie parametrizzazioni predefinite.
Sono utili per mantenere uno standard che si adatta in base ai vari utenti, siti, ecc.

L’ordine giorno-mese-anno di queste formattazioni dipende appunto dalla localizzazione e dalle impostazioni utente.

Le variabili sono queste:

GFMDAT = data standard, con 2 caratteri per giorno, 2 per il mese , 2 per l’anno
GFMDAT4 = data con l’anno a 4 cifre
GFMDAT3 = data con il mese espresso con tre lettere
GFMDAT9 = data con il mese scritto in lettere
GFMMOI = mese-anno
GFMMOI4 = mese-anno con anno a 4 cifre
GFMJOU = giorno-mese

Se avete domande o altri esempi scriveteli pure nei commenti.

Lascia un commento

Scopri di più da SageDev

Abbonati ora per continuare a leggere e avere accesso all'archivio completo.

Continue reading