Autore Topic: [RISOLTO]formattazione data  (Letto 701 volte)

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
[RISOLTO]formattazione data
« il: 06 Maggio 2017, 20:02:00 »
Ciao a tutti, il componente maskbox con proprietà impostata su 99/99/9999 viene gestita la data, usando gli eventi:

Codice: [Seleziona]
Public Sub MaskBox1_GotFocus()
  MaskBox1.Text = ""
  MaskBox1.Pos = 0
End

Public Sub MaskBox1_LostFocus()
Dim a1 As String
a1 = CDate(Replace(MaskBox1.Text, " ", "0"))
Print a1
Print Format(CDate(a1), "dd/mm/yyyy")
MaskBox1.Text = a1
End
   
e posso gestire l'inserimento dell'anno a due cifre.
il problema e che non riesco a formattare la data in gg/mm/aaaa, ovvero la data che inserisco nella maskbox viene riconosciuta sempre come mm/gg/aaaa.
utilizzando il componente Valuebox viene restituita la data gg/mm/aaaa ma non riesco a gestire l'inserimento dell'anno a due cifre.
dove sbaglio?
 
« Ultima modifica: 10 Maggio 2017, 22:33:53 da naderit »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.139
  • Tonno verde
    • Mostra profilo
Re:formattazione data
« Risposta #1 il: 06 Maggio 2017, 22:45:38 »
Devi formattare Mask 00/00/0000 e...
Codice: [Seleziona]
MaskBox1.Text = Format(Date(Now), gb.ShortDate)

 :ciao:

P.S. Print è come Str non localizza

Dimenticavo: Se invece vuoi l'anno a due cifre...
Codice: [Seleziona]
  MaskBox1.Text = Format(Date(Now), "dd/mm/yy")
« Ultima modifica: 07 Maggio 2017, 09:58:23 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:formattazione data
« Risposta #2 il: 07 Maggio 2017, 13:00:51 »
grazie Gianluigi, ma, mi sono spiegato male:
- utilizzo una maskbox per inserire delle date ( utilizzo la maschera "99/99/9999" per visualizzare solo "  /  /    " se uso tutti zero viene visualizzato "00/00/0000") 
- con evento gotfocus azzero il campo e posiziono il cursore all'inizio
- con evento lostfocus aggiungo gli zeri in quanto se scrivo 10/02/15 mi visualizza 10/2/15 e mi segala errore infine corregge la data con anno a 4 cifre
Codice: [Seleziona]
Dim a1 As String
a1 = CDate(Replace(MaskBox1.Text, " ", "0"))
MaskBox1.Text = a1
Print MaskBox1.Text
End
il print mi serve solo per vedere la data visualizzata
problema:
se per ipotesi inserisco 10/02/15 mi restituisce 10/02/2015 ma se inserisco 31/12/15 mi da errore in quanto la maskbox come mese prende 31 e non 12 ( la cosa è utile per avere un controllo immediato sulla data ) se ovviamente digito prima il mese e poi il giorno fila tutto giusto, e come se non prendesse il formato data di sistema, può essere?
 :ciao:

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.139
  • Tonno verde
    • Mostra profilo
Re:formattazione data
« Risposta #3 il: 07 Maggio 2017, 14:43:44 »
Io MaskBox non l'ho mai usato, ma so che se vuoi usarlo per le date in locale devi impostare la maschera con gli zero altrimenti si posiziona in formato internazionale, vale a dire Mese/Giorno/Anno.

Ti allego l'esempio di prova.

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.252
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:formattazione data
« Risposta #4 il: 07 Maggio 2017, 14:50:50 »
se inserisco 31/12/15 mi da errore in quanto la maskbox come mese prende 31 e non 12
Se io inserisco nella MaskBox la data 31/12/15, e poi, premendo ad esempio un Button, mostro con Print la data nella console, non ottengo errore, e la data viene mostrata identica a quella inserita (gg/mm/aa).

E', invece, la funzione CDate( ) a sollevare l'errore, in quanto essa non tiene conto della localizzazione corrente.

« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.139
  • Tonno verde
    • Mostra profilo
Re:formattazione data
« Risposta #5 il: 07 Maggio 2017, 15:11:53 »
Usare la maschere 00 oppure 99 non è esattamente la stessa cosa, infatti nel secondo caso gli zeri ante numero spariscono, ma è vero quanto dice vuott e infatti io ti avevo postato del codice con Date e non CDate.
Comunque dovendo in entrambi i casi gestire l'input dell'utente puoi benissimo continuare ad usare 99 ma all'utente dovrai specificare le cifre da digitare altrimenti sai che bordello.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:formattazione data
« Risposta #6 il: 08 Maggio 2017, 23:34:50 »
Prova ad usare una DateBox con proprietà Mode settata su DateOnly,
io le uso regolarmente è non ho nessun tipo di problema compresa la gestione
delle barre di separazione giorno, mese e anno.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:formattazione data
« Risposta #7 il: 10 Maggio 2017, 21:35:38 »
ciao, visto solo ora i post....scusate ma mi sono fissato su un problema che può essere banale o insignificante ma ai fini pratici può essere utile per l'inserimento dei dati.
Gianluigi ho provato il tuo esempio: funziona, ma  se inserisco 10/02/17 non trasforma in 10/02/2017 questo per me è importante quando dovrò salvare la data in un data base ( spero di aver risposto anche a vuott si è vero che se non utilizzo Cdate stampo il valore della maskbox )
Tornu una datebox e uguale o simile ad una valuebox? in tal caso se nella proprietà Type seleziono Date viene visualizzato 00/00/0000 e se inserisco 10/02/17 viene visualizzato 10/02/1700.


Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.139
  • Tonno verde
    • Mostra profilo
Re:formattazione data
« Risposta #8 il: 10 Maggio 2017, 21:50:35 »
E facendo...
Codice: [Seleziona]
Public Sub MaskBox1_LostFocus()
  Print Format(Val(MaskBox1.Text), "dd/mm/yyyy")
End

non ti va bene?

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:formattazione data
« Risposta #9 il: 10 Maggio 2017, 22:07:56 »
ora provo, ma avrei quasi risolto con.....
Codice: [Seleziona]
Public Sub MaskBox1_LostFocus()
  Dim a1 As String
  Dim a2 As String
 
  a1 = Replace(MaskBox1.Text, " ", "0")
  a2 = Month(a1) & "/" & Day(a1) & "/" & Year(a1)
  MaskBox1.Text = a2
  Print a2
End
;D
« Ultima modifica: 10 Maggio 2017, 22:09:01 da naderit »

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:formattazione data
« Risposta #10 il: 10 Maggio 2017, 22:32:47 »
ottimo Gianluigi, grazie, non avevo pensato ad usare Val ... ho risolto
Codice: [Seleziona]
Public Sub MaskBox1_LostFocus()
  Dim a1 As String
 
  a1 = Replace(MaskBox1.Text, " ", "0")
  MaskBox1.Text = Format(Val(a1), "dd/mm/yyyy")
 
  Print MaskBox1.Text
End

in questo modo se inserisco 10/02/17 mi trasforma 10/02/2015 come pure se inserisco 31/12/16 non da errore e stampa 31/12/2016
ottimo  :ciao:
allego esempio