Newsgroup: it.comp.lang.visual-basic
Titolo: [?] data usa --> data it

devo convertire dei file di testo con campi separati da tab in un mdb.
tutto ok, salvo la data: nel testo:
07/08/00 08:01:27
e' l'8 luglio, essendo americano il programma che lo genera.
c'e' un modo migliore e piu' rapido che usare left$() e mid$() per girarla
in formato italiano ?
grazie in anticipo, a.

 ha scritto nel messaggio
news:384d8...@news.megasys.it...

l'istruzione format(DataDaVisualizzare,"dd/mm/yyyy").
--
 
federic...@planet.it
Eliminare NOSPAM dall'indirizzo! Delete NOSPAM from address!

 c'e' un modo migliore e piu' rapido che usare left$() e
mid$() per girarla in formato italiano ?
Ti propongo un modo stupendo e, probabilmente, esclusivo che
non fa uso di Left e Mid. Un solo piccolissimo neo: non e` ne'
migliore ne' piu` rapido. :-))))
Option Explicit
Private Sub Form_Load( _
)
  Dim strTime    As String
  Dim dtm        As Date
  Dim strDataUSA As String
  Dim strDataITA As String
  Let strTime = " 08:01:27"
  For dtm = #1/1/00# To #12/31/00#
    Let strDataUSA _
      = Format$(dtm & strTime, "mm/dd/yy hh:mm:ss")
    Let strDataITA _
      = Format$( _
          strDataUSA _
        , IIf(strDataUSA Like "##/0[1-9]*" Or _
              strDataUSA Like "##/1[0-2]*" _
            , "mm/dd", "dd/mm") _
        & "/yy hh:mm:ss")
    Call List1.AddItem(strDataUSA & " = " & strDataITA)
  Next
End Sub
--
Ciao.
Maurizio


Format(), nell'help in linea.
Ed, eventualmente IsDate() e CDate().

 l'istruzione format(DataDaVisualizzare,"dd/mm/yyyy").
a causa della solita ambiguita' di alcune date, temo non sia del tutto
affidabile:
Private Sub Command5_Click()
    Dim tmp
    tmp = Format(dbLog.Recordset!giorno, "dd/mm/yyyy")
    Debug.Print dbLog.Recordset!giorno & " --> " & tmp & " -- " &
IsDate(tmp)
End Sub
immediate:
05/29/00 19:08:05 --> 29/05/2000 -- True
07/08/00 10:12:55 --> 07/08/2000 -- True
in mancanza di meglio:
Private Sub Command5_Click()
'05/29/00 19:08:05
    Dim g As String * 2, m As String * 2, a As String * 2
    Dim tmp As String, sep As String * 1
    tmp = dbLog.Recordset!giorno
    sep = "/"
    g = Mid$(tmp, 4, 2)
    m = Mid$(tmp, 1, 2)
    a = Mid$(tmp, 7, 2)
    tmp = CDate(g & sep & m & sep & a & Chr(32) & Mid$(tmp, 10, 8))
    Debug.Print dbLog.Recordset!giorno; " --> "; tmp; " -- "; IsDate(tmp)
End Sub
immediate:
05/29/00 19:08:05 --> 29/05/2000 19:08:05 -- True
05/30/00 18:45:34 --> 30/05/2000 18:45:34 -- True
06/05/00 17:35:57 --> 05/06/2000 17:35:57 -- True
07/08/00 10:12:55 --> 08/07/2000 10:12:55 -- True
grazie e ciao, a.


Anche con SP4 c'è questo bug del Format?


 Anche con SP4 c'è questo bug del Format?
usando vb5, non te lo saprei dire.
ma secondo me non e' un buco nella funzione, e' proprio un casino in cui ci
si imbatte ogni volta che si ha a che fare con le date americane ambigue,
quelle in cui le prime 2+2 cifre possono essere indifferentemente giorno o
mese. anche in sql e' un po' un casino.
ciao, a.

 Anche con SP4 c'è questo bug del Format?
Resto dell'opinione che il bug non riguardi "Format".
--
Ciao.
Maurizio

Aggiungo solo che avendo dovuto basare una query in ASP su campi data ci ho
messo un po' a capire in quale formato scrivere le date stesse.
Mi è inoltre sorto il dubbio che tale formato possa cambiare al cambiare del
Server (o meglio delle sue impostazioni internazionali).
Ciao, Giorgio


Se il tuo pc e' settato con formato data italiano, prova con :
cdate(#07/08/00#)
vedrai che ti restituira' 08/07/00.
Il 'trucco' sta nel mettere la data tra "#".
Ciao.
Lorenzo


Per me il fatto che la data venga interpretata, che cioè se le prime
due cifre rientrano nell'intervallo 1-12 vengano convertire in mese,
altrimenti in giorno, non mi sembra proprio un 'casino' ma un bel bug
o comunque una grave instabilità.
Una funzione 'stabile', se trova 13 come valore del mese deve darmi un
errore, non interpretare che, forse, non siamo in America ma in
qualche altro paese dove, forse, li ci va' il giorno.
Ciao, comunque ancora non so se è stata corretta con il SP4.
