Differenze tra le versioni di "Convertire data ed orario da formato Date in un numero"

Da Gambas-it.org - Wikipedia.
 
(8 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
La conversione di un valore di tipo ''Date'', oppure di una stringa contenente data ed orario rappresentati nel formato ''Date'' (ossia: "giorno/mese/anno ore:minuti:secondi") locale, prevede l'uso di alcune funzioni.
+
La conversione di una data e un orario rappresentati nel tipo di dati "''Date'' " (ossia: "giorno/mese/anno ore:minuti:secondi") locale in un valore numerico può avvenire in alcuni modi.
  
 
+
==Conversione di data ed orario, contenuti in una variabile di tipo ''Date'', in un numero in virgola mobile==
===Conversione di data ed orario contenuti in una variabile di tipo ''Date''===
+
In questo caso la conversione avverrà usando la funzione nativa "CFloat()", e sarà restituito un valore in virgola mobile che rappresenta a sinistra della virgola i giorni trascorsi dal primo numero di giorni dall'epoca di Gambas (un giorno arbitrario risalente a circa 8000 anni a.C.) e a destra della virgola i millesimi di secondo trascorsi dalle ore 00:00 del giorno corrente.
In questo caso la conversione avverrà nel seguente modo:
 
numero = CFloat(Val(Str(''variabile_Date'')))
 
 
 
 
 
Esempio:
 
'''Public''' Sub Main()
 
 
  dim numero As Float
 
 
  numero = CFloat(Val(Str(Now)))
 
 
  Print numero
 
 
'''End'''
 
 
 
 
 
 
 
 
 
===Conversione di data ed orario contenuti in una variabile di tipo ''Stringa''===
 
Se la data e l'orario sono contenuti in una variabile di tipo ''Stringa'' e rappresentati nel dovuto formato ''Date'', allora la conversione avverrà nel seguente modo:
 
numero = CFloat(Val(''variabile_Stringa''))
 
 
 
 
 
Esempio:
 
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
   Dim s As String
+
   Print CFloat(Now)
  Dim numero As Float
 
 
  s = "21/08/1969 11:21:41"
 
 
  numero = CFloat(Val(s))
 
 
  Print numero
 
 
   
 
   
 
  '''End'''
 
  '''End'''
  
  
 +
==Conversione da data/orario in numero intero corrispondente==
 +
In quest'altro caso la data e l'orario vengono convertiti nel esatto numero intero corrispondente.
  
===Conversione da data/orario in numero intero e successiva riconversione in formato data/orario===
+
Se la data/orario sono quelli correnti, allora si potrà utilizzare la seguente riga:
Come abbiamo visto nei paragrafi precedenti, la conversione restituisce come valore finale un numero con la virgola, che può essere contenuto in una variabile di tipo ''Float''.
+
  Print Val(Format(Now, "ddmmyyyy")), Val(Format(Now, "hhnnss"))
 
+
Qualora si volesse trasformare questi i valori ottenuti della data e dell'orario in un unico valore in virgola mobile, si potrà fare come segue:
Per convertire tale risultato finale da numero in virgola mobile in un unico numero intero, bisognerà trasformarlo in un valore di tipo ''Long'' con apposita procedura.
+
  Print Val(Format(Now, "ddmmyyyy")) + (Val(Format(Now, "hhnnss")) * 1E-6)
 
 
  
Mostriamo un esempio circolare, nel quale dalla data/orario corrente si otterrà il corrispondente numero in virgola mobile che sarà trasformato in un intero lungo. Successivamente si effettuerà il procedimento inverso, riottenendo ala fine il valore data/orario.
 
'''Public''' Sub Main()
 
 
  Dim numero As Float
 
  Dim s As String
 
  Dim l As Long
 
  Dim f As Float
 
  Dim bb As New Byte[]
 
 
 
 
   
 
   
  numero = CFloat(Val(Str(Now)))
+
Se però la data non è quella corrente, allora si potrà utilizzare la seguente riga impostando la data in una stringa da convertire in tipo di dati "Date", da passare successivamente alla funzione "Format()", e quindi convertita in valore numerico con la funzione "Val()":
  Print "Numero in virgola mobile = "; numero
+
  <FONT Color=gray>' ''Nel caso, rappresentato dal seguente esempio, la stringa della data, impostata nel secondo argomento della funzione nativa "Format()", dovrà essere impostata all'americana: mese/giorno/anno.''</font>
+
  Print Val(Format(CDate("08/21/1969"), "ddmmyyyy"))
  s = str(numero)
 
 
 
 
  <FONT Color=gray>' ''Conversione in un unico numero di tipo Long:''</font>
 
  s = Replace(s, ",", Null)
 
  l = CLong(Val(s))
 
  Print "Unico numero intero lungo = "; l
 
 
 
<FONT Color=gray>' ''Conversione in un numero in virgola mobile:''</font>
 
  s = CStr(l)
 
  bb = Byte[].FromString(s)
 
  bb.Add(Asc(","), 7)
 
  s = bb.ToString()
 
  f = CFloat(Val(Str(s)))
 
  Print "Numero in virgola mobile = "; f
 
 
 
<FONT Color=gray>' ''Conversione in formato data/orario:''</font>
 
  Print CDate(f)
 
 
'''End'''
 

Versione attuale delle 10:52, 26 apr 2021

La conversione di una data e un orario rappresentati nel tipo di dati "Date " (ossia: "giorno/mese/anno ore:minuti:secondi") locale in un valore numerico può avvenire in alcuni modi.

Conversione di data ed orario, contenuti in una variabile di tipo Date, in un numero in virgola mobile

In questo caso la conversione avverrà usando la funzione nativa "CFloat()", e sarà restituito un valore in virgola mobile che rappresenta a sinistra della virgola i giorni trascorsi dal primo numero di giorni dall'epoca di Gambas (un giorno arbitrario risalente a circa 8000 anni a.C.) e a destra della virgola i millesimi di secondo trascorsi dalle ore 00:00 del giorno corrente.

Public Sub Main()

 Print CFloat(Now)

End


Conversione da data/orario in numero intero corrispondente

In quest'altro caso la data e l'orario vengono convertiti nel esatto numero intero corrispondente.

Se la data/orario sono quelli correnti, allora si potrà utilizzare la seguente riga:

 Print Val(Format(Now, "ddmmyyyy")), Val(Format(Now, "hhnnss"))

Qualora si volesse trasformare questi i valori ottenuti della data e dell'orario in un unico valore in virgola mobile, si potrà fare come segue:

 Print Val(Format(Now, "ddmmyyyy")) + (Val(Format(Now, "hhnnss")) * 1E-6)


Se però la data non è quella corrente, allora si potrà utilizzare la seguente riga impostando la data in una stringa da convertire in tipo di dati "Date", da passare successivamente alla funzione "Format()", e quindi convertita in valore numerico con la funzione "Val()":

' Nel caso, rappresentato dal seguente esempio, la stringa della data, impostata nel secondo argomento della funzione nativa "Format()", dovrà essere impostata all'americana: mese/giorno/anno.
 Print Val(Format(CDate("08/21/1969"), "ddmmyyyy"))