Newsgroup: it.comp.lang.visual-basic
Titolo: Convertire Float-Date

Ho questa necessità per creare del codice in VBScript da inserire in una DTS
di SQLServer.
Esiste una funzione standard che faccia questa conversione?
ES:  Dato il float contenente --->  20040210
       Ottenere un dato in formato date ---> 10/02/2004
Grazie mille

[Doohan = 
circa_...@libero.it
 in vwukc.172477$
rM4.7...@news4.tin.it
]
ha scritto:

data=DateSerial(Fix(fl/10^4), Fix((fl Mod 10^4)/10^2), (fl Mod 10^2)
... da provare.

 ... da provare.
manca una parentesi chiusa in coda.

 ha scritto nel messaggio
news:c6tspc$g91mr$1...@ID-174464.news.uni-berlin.de...

Interessante...provo e ti so dire.
Grazie mille, anche per la velocità!

 ... da provare.
io uso Left$  Mid$ Right$ ... credo che la tua sia + performante pero' !
-- 
-Gigio@Work(?)-

[Gigio2k [work] = 
circa_gigio2k...@g2kweb.it
 in
c6tt7q$gcd31$
1...@ID-174485.news.uni-berlin.de
] ha scritto:

Ha parlato di un float, non di una stringa.
Vero che (W i variant) si potrebbe prima fare:
stringa=Right(10^8+fl,8)


Beh, con un float (double), le tue funzioni non vanno.
Cioè, tu puoi anche inserire il Double come parametro di Left$, ma a questo
punto VB esegue un CStr implicito, e come sappiamo il CStr dei double non è
quello che si può definire deterministico, se l'output atteso è una
rappresentazione di interi...
Ciao
Alberto

*Albe V°* ha provocato un errore irreversibile in mex.dll
 Dettagli : "il newsgroup non poteva essere written" - Stack :

-- 
<Gigio2K>
--- 
http://www.g2kweb.it/gigio2k
 ---
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

 atteso è una rappresentazione di interi...
non ho capito se questo float e' una variabile long , se si, non capisco
quale errore possa dare !
Cioe' es:
Dim X as long
X = 20040501
msgbox left$(x,4)
non ottengo "2004" ?
Oppure questi float sono dei dati diversi ?


 Oppure questi float sono dei dati diversi ?
Con questo Albe rigetterà tutto il pranzo in mare o, peggio, sulla vela...
Per float io intendo un numerico (in virgola mobile?), tu lo tratti come se
fosse una stringa...
Potrebbe essere lecito (Albe permettendo), ma se X (numerico, Long) valesse
9990501?
(Vedi il mio post sopra, quello con 10^8, dove ... ti vengo incontro)

 valesse 9990501?
non e' una data e la si scarta no ? quindi :
Controllo se e' lunga 10 ed e' una cifra e poi la "formatto" + che converto
in una stringa che rappresenta la data !
Forse la mia risposta era troppo generica, in quanto sono io che scrivo
(scrivevo) le date in formato numerico (es: 20040501), e poi lo convertivo
per la lettura.
Ora tratto le date come "tipo data" e controllo solamente le impostazioni
del pannello per eventuali formattazioni. anche se nelle query era +
semplice lavorare su numeri che sulle date ... !


 non e' una data e la si scarta no ?
Perchè non è una data? L'anno 999 l'anno segato?

 Perchè non è una data? L'anno 999 l'anno segato?
Metti le h dove ne hai voglia :-P

 Metti le h dove ne hai voglia :-P
ghgh, dicevo che :
"Controllo se e' lunga 10 ed e' una cifra ...."
e' logico che ho parlato per esperienza personale e che i dati in input li
avevo creato io , quindi,sapevo a priori cosa e come avevo !


 non ottengo "2004" ?
OK.
Provo a spiegarmi in modo diverso.
Innanzi tutto parlavi di float, e invece qua dimensioni come Long, che non č
un float.
Quindi, torniamo alla situazione di cui si parlava, e dimensioniamo come
Double (che č un float).
Il tuo codice quindi č:
Dim X as Double
X = 20040501
msgbox left$(x,4)
Bene.
Guarda bene l'espressione che ho/hai scritto. Secondo te esegue esattamente
cosě?
Risposta: no.
In realtŕ esegue in questo modo:
Dim X as Double
X = 20040501
msgbox left$(CStr(x),4)
E' una pessima abitudine di molti sviluppatori VB quella di non esplicitare
le conversioni di tipo, ma se uno č cosciente che esse avvengono, si puň
anche capire. E' grave quando invece uno sviluppatore non sa che esse
vengono inserite implicitamente.
Proseguiamo.
Nel caso specifico, ossia del left$, di problemi non ne avresti, perchč
"l'errore" del CStr sui float (che errore non č, come sappiamo, ma
semplicemente una impossibilitŕ ad una conversione float->decimale umano
esatta) si limiterebbe a pochi miliardesimi, per cui la parte piů
significativa della tua stringa sarebbe comunque 2004.
Questo non č invece vero per il Right$ o per il Mid$ applicato sulla parte
del giorno.
Cioč, se cerchi di estrarre il giorno con:
msgbox Right$(CStr(x),2)
o con
msgbox Mid$(CStr(x),7,2)
*NON* č detto che ti restituisca 1. Il Right$ potrebbe restituirti qualunque
cosa, il Mid$ potrebbe restituirti zero.
Tutto qua.
Ciao
Alberto

 msgbox left$(CStr(x),4)
Emh, dimenticavo: a rigore, sarebbe ancora diverso...
Dim X as Double
X = CDbl(20040501)
msgbox left$(CStr(x),4)
Alberto

> Risposta: no.
si scusa, come ho risposto in seguito :
"
Forse la mia risposta era troppo generica, in quanto sono io che scrivo
(scrivevo) le date in formato numerico (es: 20040501), e poi lo convertivo
per la lettura.
"
io ho sempre usato integer o stringhe per queste cose, logicamente so' cosa
sono le conversioni implicite e come operano, peccato che quando rispondo
sul ng non lo faccio con i crismi che uso quando programmo. La mia ignoranza
sul termine "float" mi ha fatto prendere sottogamba la parola "long" ^_^
Almeno la tua precisazione potra' servire ad altri che programmando non
prenderanno sottogamba le conversioni da numeri a stringhe.
