Newsgroup: it.comp.lang.visual-basic
Titolo: Trasformazione data

Mi sta succedendo una cosa strana, di cui non mi ero accorto finora:
ho una variabile stringa che contiene una data errata (es. MyStr =
"01/13/2004"); la funzione IsDate mi ritorna True, e la funzione Cdate
mi ritorna 13/01/2004.
La cosa non succede se la stringa contiene una data corretta.
Sembra che VB cerchi di trasformare una data formalmente errata in una
corretta, a costo di utilizzare un altro formato.
A qualcuno è capitata la stessa cosa? (e magari sa se  e come si può
risolvere?).
Grazie.

 A qualcuno č capitata la stessa cosa?
Hai probabilmente dei problemi con la configurazione del tuo newsreader.
Configuralo in modo da vedere i thread del giorno prima.
Ciao
Alberto

 mi ritorna 13/01/2004.
Certo, perche' "01/13/2004" *E'* una data corretta in formato MM/GG/AAAA..
Se vuoi lavorare decentemente con le date senza mal di testa, non usare 
variabili o campi stringa per le date, ma usa il tipo Date, e quando 
devi convertire da stringa a data e viceversa creati due funzioncine 
apposite, ad esempio:
MiaData = StringDMY2Date("13/01/2004")
MiaStringa = Date2StringDMY(Now)
Se devi anche dialogare con un DB (che vuole le date in MM/GG/AAAA):
Sql = "select * from fatture where data=#" & Date2StringMDY(Now) & "#"
Ecco qualche funzione per fare queste cose, e che se vuoi puoi adattare 
alle tue esigenze:
Function StringDMY2Date(Stringa)
	If DateOK(DateDMSwap(Stringa)) Then
		StringDMY2Date = ConvDate(DateDMSwap(Stringa))
	Else
		StringDMY2Date = ""
	End If
End Function
' --------------------------------------
Function StringMDY2Date(Stringa)
	If DateOK(Stringa) Then
		StringDMY2Date = ConvDate(Stringa)
	Else
		StringDMY2Date = ""
	End If
End Function
' --------------------------------------
Function Date2StringDMY(Data)
	On Error Resume Next
	If CInt("0" & Day(Data))=0 Then
		Date2StringDMY = ""
	Else
		Date2StringDMY = Right("0" & Day(Data),2) & "/" & _
			Right("0" & Month(Data),2) & "/" & Year(Data)
	End If
End Function
' --------------------------------------
Function Date2StringMDY(Data)
	On Error Resume Next
	If CInt("0" & Day(Data))=0 Then
		Date2StringMDY = ""
	Else
		Date2StringMDY = Right("0" & Month(Data),2) & "/" & _
			Right("0" & Day(Data),2) & "/" & Year(Data)
	End If
End Function
' --------------------------------------
Function DateDMSwap(Stringa)
	' Inverte le prime due parti di una stringa-data
	If Stringa<>"" Then
		DateDMSwap = Mid(Stringa,4,2) & "/" & Left(Stringa,2) & _
			"/" & Mid(Stringa,7)
	Else
		DateDMSwap = ""
	End If
End Function
' --------------------------------------
Function ConvDate(Stringa)
	' Converte una stringa MM/DD/YYYY in data
	If DateOk(Stringa) Then
		ConvDate = DateSerial(CInt(Mid(Stringa,7)), CInt(Left(Stringa,2)), _
			CInt(Mid(Stringa,4,2)))
	Else
		ConvDate = ""
	End If
End Function
' --------------------------------------
Function DateOK(Stringa)
	' verifica se una stringa-data MM/DD/YYYY e' corretta
	Dim d, m, y
	m = Left(Stringa,2)
	d = Mid(Stringa,4,2)
	y = Mid(Stringa,7)
	If Len(Stringa)=10 And IsNum(d) And IsNum(m) And IsNum(y) _
		And Mid(Stringa, 3, 1) = "/" And Mid(Stringa, 6, 1) = "/" Then
		d = CInt(d)
		m = CInt(m)
		y = CInt(y)
		If d*m*y>0 And d<=31 And m<=12 And y>=1900 Then
			DateOK = True
			Exit Function
		End If
	End If
	DateOK = False
End Function
-- 
Ciao!
    -DocDoc-
--- Per scrivermi: docdoc()
sertel.net
Sei anche tu stanco dei messaggi spam? Usa Terminator, il programma
anti-spam italiano FREEWARE!     
http://www.spamterminator.it/

...

Ti ringrazio per la risposta: ho usato una variabile stringa perchè
devo controllare se una data inserita in un textbox è corretta, per
cui mi basavo soltanto sulla funzione IsDate. Infatti il mio non è un
problema di conversione date, che so bene come si fa, ma un problema
di CONTROLLO di una data. A questo punto penso che l'unica soluzione
sia quella che dici tu: farsi delle routine che eseguono il
controllo,(tipo la tua DateOK). Sarà opportuno quindi gestire per bene
il numero massimo di giorni di ogni mese, nonchè gli anni bisestili,
oltre che a verificare tutti i possibili formati in cui una persona
può inserire una data: gg/mm/aaaa, gg/mm/aa, gg-mm-aa, gg-mm-aaaa,
ggmmaa, ggmmaaa ecc. ecc.
Grazie per la gentilezza.

 sia quella che dici tu: farsi delle routine che...
[cut]
Oppure fare copia-incolla, magari leggendo fra le righe quello che ti ho
postato io.
Ciao
Alberto