Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Formattare stringa "20030218" in data 18-02-2003 metodi veloci ?

Allora ho una stringa o numero ( ancora da definire ^_^; ) cosi formata :
20030218
yyyymmdd
ora logicamente e' una stringa o un numero , ma non una data , mi chiedevo
se con qualche barbatrucco si potesse VISUALIZZARE in una cosa del tipo :
"18/02/2003"
dd/mm/yyyy
magari giocando con format  e cdate ?
Bha, mi so fatto ua func myDate(stringa) che mi ribalta il tutto e me lo
formatta ... ma credo ci debba essere un altra strada !
Suggerimenti ?

 dd/mm/yyyy


Ciao Gigio!!!
Con quale database devi lavorare? SQL Server?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 yyyymmdd
visto che nè il datevalue, nè il cdate funzionano (ho appena provato), farei una
scomposizione della stringa, e poi farei un dateserial... ma non credo sia molto
diverso da quello che fai ora....
--
Salutoni
Sergio

 ha scritto nel
messaggio news:b2vvti$1gla3s$1...@ID-174485.news.dfncis.de...

Io ho fatto come te anzi, nella mia funzione passo anche dei parametri (es.
tipo di db, data con o senza ora...) in questo modo la uso anche per la
formattazione delle date quando creo delle query così il codice rimane
sempre lo stesso per tutti i db
ciaociao

 Con quale database devi lavorare? SQL Server?
non credo che debba lavorare con un db... penso che sappia già, che in quel
caso, la data andrebbe già benissimo così. :-)
--
Salutoni
Sergio

 Con quale database devi lavorare? SQL Server?
No "nessuno" diciamo , infatti lo scopo e' trovare una func o concatenazione
di esse che sia abbastanza standard e che vada bene per tutte !
grazie dell'interessamento ! ^_-

 diverso da quello che fai ora....
bha lo scopo e' appunto evitare di scomporre la stringa .. , diciamo + per
principio che per altro ^_^
che strano che un dato "yyyymmdd" non si riesca a trasformare direttamente
in una data valida :-/ e pensare che MSDN dice :
/*
Visual Basic accetta un'ampia gamma di formati di data e ora. Di seguito
sono elencati alcuni valori validi:
SomeDate = #3-6-93 13:20#
SomeDate = #March 27, 1993 1:20am#
SomeDate = #Apr-2-93#
SomeDate = #4 April 1993#
*/
Alla faccia dell'ampia gamma :/

 Alla faccia dell'ampia gamma :/
e, come si è detto spesso, il formato yyyymmdd è quello che crea meno problemi
di compatibilità nelle query sql....
Magari c'è una qualche funzioncina di vb che non conosciamo.....
Vediamo se qualcuno è in grado di illuminarci.
--
Salutoni
Sergio

 sempre lo stesso per tutti i db
bhe i miei utenti si dovranno abituare a leggere una data cosi formattata:
20030218 (integer) ^_^ cosi siamo tutti + contenti , se reclamano con solo
100Euro in regalo un calendarietto portatile per la conversione in data
compresa di Santi e Ricorrenze ^_______________^
CaffeTime , per ora basta con le pippe mentali , CMQ non vi preoccupate ho
fatto questa domanda per curiosita' , giusto per stuzzicare e non far
addormentare le persone che lavorano ^_^ !
cmq mi studio il dateserial ... forse che forse ....

 dd/mm/yyyy
Magari la febbre mi sta facendo dire cavolate, mi scuso se è cosi, ma ser
ricevi la data come
hai detto sopra, con una funzione del tipo:
format$(cdate(format$("20030218","0000/00/00")),"dd-mm-yyyy")
potrebbe funzionare...
lascio a te le verifiche del caso.
Ciao, Giorgio.

 grazie dell'interessamento ! ^_-
Dunque, una possibile concatenazione potrebbe essere questa:
Dim miaData As String, miaDataApp As Date, miaVar As String
miaVar = "20020218"
miaData = Left(miaVar, 4) & "/" & Mid(miaVar, 5, 2) & "/" & Right(miaVar,
2)
miaDataApp = CDate(Format(Day(miaData) & "/" & Month(miaData) & "/" &
Year(miaData), "dd/mm/yyyy"))
Cosě funziona, che te ne pare?:)


 Cosě funziona, che te ne pare?:)
non so se funziona, ma dal punto di vista concettual informatico č una cosa
pazzesca.
se albe legge questo post gli viene uno schioppone.
--
Salutoni
Sergio

 se albe legge questo post gli viene uno schioppone.
La mia soluzione funziona, se ne esistono altre migliori, ben vengano:)


 una cosa pazzesca.
vediamo di essere un po' meno criptici, và... :-)
miaData = Right(miaVar, 2) & "/" & Mid(miaVar, 5, 2) & "/" & Left(miaVar, 4)
miadataapp = cdate(miadata)
è più che suffuciente....
--
Salutoni
Sergio

 se albe legge questo post gli viene uno schioppone.
Azz...
l'ho letto...
Beh, diciamo che ci sono una quantità indefinita di conversioni implicite,
che si è esposti alle impostazioni internazionali per l'inversione
giorno/mese fra italiano e Usa, e che sicuramente non è ottimizzata.
Però non è mostruosa. L'idea di fondo è buona.
Qualche post più sotto, comunque, credo ci sia la soluzione definitiva.
Si è scoperto che CDate("2003/05/20") restituisce la data giusta, quindi
basta aggiungere le barrettine e si è a posto.
Alberto

 Cosě funziona, che te ne pare?:)
eh eh , e' quasi identica alla mia ^_^
solo il fatto che in uscita ho una stringa invece che una data ( la funzione
mi serve solo per visualizzare e/o convertire da datamemorizzata a
datavisualizzata
es:
nel programma uso per i calcoli : 20030218(integer)
text1.text = myDate(20030218,"-" .... )
mi restituisce "18-02-2003"
public func myDate(valData as integer,Separatore as string.....) as string
    sData = str(valdata)
    mydate = Left$(sDate, 4) & Separatore & Mid(sDate, 5, 2) & Separatore &
Right(sDate,7,2)
...
diciamo che il punto non e' questo ma scoprire una qualche conversione che
accetti "20030218" come una data , esistera' ?
(devo smettere di farmi le pippe mentali su vb al posto di dormire... ops...
*LAVORARE* volevo dire ! ^_^ )

 vengano:)
non è questione di funzionare o meno, si tratta di capire quello che si fa...
le istruzioni day, month, e day che utilizzi accettano come parametro un variant
di tipo date, quindi, per essere eseguite con la stringa che gli passi, vb
effettua tre volte un cast implicito.
Tanto vale farne uno solo esplicito....
--
Salutoni
Sergio

 basta aggiungere le barrettine e si è a posto.
... ma scusa non si vanno in contro a problemi con le impostazioni
internazionali ?
cioe' voglio dire , se gli passo la data con le barrette siamo sicuri che
funzioni in tutto il mondo ?
Cmq e' ottimo , la mia func si e' ridotta di ben 3 righe ^_^ tnk !

 nel messaggio news:b2vvti$1gla3s$1...@ID-174485.news.dfncis.de...

    CDate(Format$("20030217","@@@@\/@@\/@@"))
--
Ciao :o)
Maurizio
--------
?SPQR(C)
 X
--------

     CDate(Format$("20030217","@@@@\/@@\/@@"))
                            - E U R E K A -
Grazie e' perfetta , ora ci gioco un po per farlo diventare un convertitore
universale ^_^
20030217 <==>  "17/02/2003"

 che funzioni in tutto il mondo ?
Sono molto fiducioso.
Quando si mette l'anno alla fine, come aveva fatto kleila e (immagino) anche
tu, il CDate puň confondersi, perchč "03/04/2003" puň rappresentare sia il 3
Aprile che il 4 Marzo, a seconda delle impostazioni internazionali.
Mettendo l'anno all'inizio, non mi risulta esista alcun formato standard con
yyyy/dd/mm.
Vero č, che qualcuno potrebbe averlo messo come proprio formato
personalizzato, per cui effettivamente il CDate potrebbe confondersi.
Cosě d'istinto, diciamo che probabilmente la soluzione postata da Gio e da
Borrelli va bene nel 99.9% dei casi.
Per essere sicuri al 100%, occorre usare:
Data=DateSerial(CInt(Left$(testo, 4)), CInt(Mid$(testo, 5, 2)),
CInt(Mid$(testo, 7, 2)))
Ciao
Alberto


Veramente piů sopra avevi sollevato una giusta obiezione proprio
relativamente a questa soluzione.
E, purtroppo, avevi ragione.
Vedi il mio post.
Ciao
Alberto

 CInt(Mid$(testo, 7, 2)))
ritorniamo da capo , a questo punto se sono io che ribalto la stringa non mi
serve una conversione in data ... pero' e' utile ... umm um ....
[Coding]

 non mi serve una conversione in data ... pero' e' utile ... umm um
Negativo.
Se 'ribalti' la stringa, fra Italia e Usa c'è una interpretazione diversa
(dd/mm o mm/dd).
Ciao
Alberto

 Vedi il mio post.
[...]
    La giusta obiezione, e sono d'accordo che e' giusta, tuttavia non
riguarda *questa soluzione*. Siccome:
        Function CDate(Expression) As Date
            Membro di VBA.Conversion
            Converte un'espressione in Date
il problema che dici tu riguarda semmai quel che se ne fara'
successivamente del valore Date cosi' ottenuto.


miadataapp = cdate(miadata)
-- 


 Cioč come hai fatto tu?
si, ma č una boiata lo stesso :-)
mi sembra che gli altri rami del thread abbiano preso direzioni decisamente piů
interessanti
--
Salutoni
Sergio

 (dd/mm o mm/dd).
intendevi QUESTO post ?
gia' gia' ho fatto un po di prove .... e come al solito torno sempre d+
sulle mie convinzioni :
- IL FORMATO DATA NON ESISTE PER ME -
il metodo migliore che ho sempre usato e' trattare la data come un numero:
yyyymmdd,hhmmss  se lo voglio visualizzare ribalto a mano la STRINGA e la
visualizzo come me pare , so che non e' standard per nulla , ma e' l'unica
che vada bene per i miei scopi !
############################################################################
##
#################      - IL PUNTO DELLA SITUAZIONE -
#########################
############################################################################
##
cmq come dicevi tu + sopra , se mi serve un valore DATA al 99% si puo' usare
quella proposta da
Maurizio Borrelli
dim miaVar as integer
miavar = 20030218
miaDataVisualizzata = CDate(Format$(str(miavar)","@@@@\/@@\/@@"))
NOTE : puo' confondersi tra : yyyy dd mm (america) e  yyyy mm dd (europa)
altrimenti la si tratta da stringa e la si ribalta con left$ mid$ e right$
e la si calcola come numero
( come ho fatto fin ora senza avere nessun problema )
dim miaVar as integer
miavar = 20030218
miaDataVisualizzata  = Right(miaVar, 2) & "/" & Mid(miaVar, 5, 2) & "/" &
Mid(miavar,7)  (*)
(*) left(miavar,2) e' stata tolta per evitare casini con anni < o > di  4
cifre  ^_^
Almeno fino a questo punto siamo tutti d'accordo ?

 successivamente del valore Date cosi' ottenuto.
Il punto della mia osservazione invece era proprio questo:
CDate recognizes date formats according to the locale setting of your system
Quindi, se tu fai:
Data=CDate("2003/02/03")
(che se non sbaglio č quello a cui arrivava la tua bella soluzione), su
alcuni sistemi abbiamo
Data: 2 Marzo 2003
Su altri sistemi abbiamo
Data: 3 Febbraio 2003
A seconda del formato inserito come impostazione locale del sistema
operativo.
Ciao
Alberto

 operativo.
purtroppo l'unico modo per scampare all'errore e' "leggere" le impostazioni
Private Sub TestaData()
   On Error GoTo SiamoInAmerica
     Data = CDate("2000/13/10")
     MsgBox "E' il " &  Data
   On Error GoTo 0
   Exit Sub
SiamoInAmerica:
    If Err.Number = 13 Then
        Data = CDate("2000/10/13")
        MsgBox "Is the " & Data
    Else
        MsgBox "Altro Errore !!!"
    End If
End Sub

 impostazioni
Oppure, riposto la mia soluzione, che sinceramente non mi sembra soffrire di
questa problematica:
Data=DateSerial(CInt(Left$(testo, 4)), CInt(Mid$(testo, 5, 2)),
CInt(Mid$(testo, 7, 2)))
Ciao
Alberto

 CInt(Mid$(testo, 7, 2)))
sorry , non avevo letto (bene)* la guida su dateserial , l'unica nota e' con
gli anni a 2 cifre , ma questo non ci interessa
*=Opzionale
[MsDn]
Funzione DateSerial
Restituisce un valore Variant (Date) relativo a un anno, mese e giorno
specificati.
Sintassi
DateSerial(year, month, day)
Per quanto riguarda l'argomento year, i valori tra 0 e 29 inclusi vengono
interpretati come 2000-2029. I valori tra 30 e 99 vengono interpretati come
1930-1999. Per tutti gli altri argomenti year, utilizzare il formato a
quattro cifre, ad esempio 1800.

 operativo.
    Ahi, ahi, ahi... ma tu hai provato a vedere come stanno realmente le
cose prima di affermare questo?...
    Il bello della guida e' che non basta leggerla, bisogna anche
interpretarla. Quali sono i "locale setting" italiani?
        gg/mm/aaaa
        -oppure-
        aaaa/mm/gg
    E quelli americani?
        mm/gg/aaaa
        -oppure-
        aaaa/mm/gg
    Ovvero sia italiani che americani (e tutto il mondo, direi...) sono
d'accordo che quando una data si incomincia a scriverla con l'anno a
quattro cifre poi si scrive il mese e poi il giorno. Facci caso.


 quattro cifre poi si scrive il mese e poi il giorno. Facci caso.
Incredibile , quindi si puo' usare o CDATE o DATESERIAL o "FARLO A MANO" !!!
Incredibile quello che un post fatto per curiosita' possa scatenare ^_^
*din* *din* Agli angoli per favore ! :D

 caso.
Non solo ci avevo fatto caso, ma avevo anche già postato questo:
---
Mettendo l'anno all'inizio, non mi risulta esista alcun formato standard con
yyyy/dd/mm.
Vero è, che qualcuno potrebbe averlo messo come proprio formato
personalizzato, per cui effettivamente il CDate potrebbe confondersi.
Così d'istinto, diciamo che probabilmente la soluzione postata da Gio e da
Borrelli va bene nel 99.9% dei casi.
Per essere sicuri al 100%, occorre usare:
Data=DateSerial(CInt(Left$(testo, 4)), CInt(Mid$(testo, 5,
2)),CInt(Mid$(testo, 7, 2)))
---
Occorre che le discussioni proseguano partendo dai punti già detti,
altrimenti si continua a girare attorno al problema ripetendo le stesse
cose.
Ricominciamo:
Esistono due modi di fare questo tipo di conversioni: Deterministico o
Probabilistico.
La tua modalità è Probabilistica, ossia si basa sull'assunto che, per le
nostre conoscenze, non esiste alcun paese in cui si utilizzi il formato
yyyy/dd/mm.
Così come è molto difficile che qualcuno possa aver trovato il modo di
forzare formati personalizzati di tal genere.
Però, nessuno di noi è certo, al 100%, che non esista un paese sperduto nel
lontano oriente, dove le date si scrivono come yyyy/dd/mm (ad esempio, tu
sai come scrivono i numeri i cinesi? Non intendo i caratteri, intendo la
logica... Beh, 2003 è qualcosa del tipo 2x10^3+3, o giù di lì).
Come dicevo, la tua soluzione, "mi risulta" funzionare.
La mia idea, invece, è Deterministica. Ossia, funziona nel 100% dei casi.
Quindi, se anche troviamo un paese in cui si scrivono le date come
yyyy/dd/mm, il DateSerial utilizzerà i caratteri corrispondenti della
stringa originale come anno, mese e giorno, in maniera assolutamente
indipendente dalle impostazioni internazionali.
Puoi ovviamente continuare a utilizzare la tua funzione di conversione, e
presumo che non troverai mai alcun problema, ma io sostenevo semplicemente
che non è deterministica, e questo devo, oggettivamente, ribadirlo.
Ciao
Alberto

[Albe V°] scrisse:
(e come faccio a citare? bah, se volete ve lo leggete! il suo post intendo)
ho ancora un ulteriore dubbio: se io scrivo nel codice
dim d as date
d = cdate("01/10/2003")
la conversione dipenderà dalle impostazioni internazionali della macchina su cui
viene eseguito il codice, non di quella dove viene compilato, vero?
comunque, direi, per tentare una conclusione, che gli approcci potrebbero essere
questi, per passare da un formato stringa a un formato data:
1) se il formato della stringa è rigidamente stabilito dal codice, la cosa
migliore è dividere la stringa in sottostringhe e poi utilizzare il dateserial
per trasformarla in data
2) se la stringa è "inputata" dall'utente affidarsi agli strumenti di
conversione che tengono conto delle impostazioni internazionali della macchina
Mi pare che dal ragionamento sopra esposta sarebbe escluso solo il caso
dell'utente che ha settato le impostazioni internazionali USA (per esempio) e
scrive le date in formato italiano, ma come diceva qualcuno non si possono fare
programmi a prova di cretino perchè le risorse dei cretini sono infinite.
--
Salutoni
Sergio

 risorse dei cretini sono infinite.
Già. Ovviamente il cliente chiamerebbe incazzato, ma una scelta deve essere
fatta: o fissiamo un formato e lo scriviamo nella documentazione, a rischio
che una installazione in un altro paese faccia impazzire gli utenti, o ci
adeguiamo al paese di installazione, e quindi rispettiamo le impostazioni
local.
Ultimissima alternativa: accettare diversi formati, e in fase di
configurazione consentire all'utente di scegliere quale formato utilizzare.
Io comunque ho compiuto una scelta ancora più drastica. Fino ad oggi, non ho
mai consentito all'utente l'inserimento di alcuna data. Uso il DTPicker, e
il Value è già di tipo Date.
Ciao
Alberto

 > la conversione dipenderà dalle impostazioni internazionali della
[cut]
.
.
...SIGNORE E SIGNORI!! Con questo post siamo entrati nel guinness dei
primati per il thread più lungo mondo!!
Il premio di 1.000.000 di patacones verrà ripartito in modo proporzionale
fra tutti i partecipanti alla discussione.
(occorrerebbe sviluppare un softwarino per il calcolo delle parti)
eheheheheheh
.....ma qualcosa mi dice che fra non molto spunterà un post del tipo:
"Problema con date"
Ciao,
perchè se eseguo una query con una
data_i_dati_non_corrispondono_ai_dati_che_volevo_di_quella_data_e_se_cambio_
mi_da_errore??
:-))))))))))))))))))))
MITICI!
(ora le date per me non hanno più segreti)


Morale della favola ? Affidatevi alle impostazioni di sistema e basta!!!!
L'utente che si lamenta può essere zittito dicendogli che non ha settato
bene le impostazioni internazionali ( o meglio a suo piacimento ).
Ve lo dice uno che combatte con gli utenti da 15 anni!!!!
Ciaoooo
--------------------------------
Inviato via 
http://usenet.libero.it

 Ve lo dice uno che combatte con gli utenti da 15 anni!!!!
E se questo è il tuo approccio all'utente, direi che anche per il futuro non
vedo molta serenità...
Ciao
Alberto

 ha
scritto:

Perchè Bill Gates telefona ad ogni utente prima prendere una decisione su
come gestire le impostazioni ( internazionali ) di un prodotto che gira
sotto window?
Le impostazioni internazionali ci sono per un motivo ben preciso non per il
piacere di creare un paio di finestre in più.
Ciao


 piacimento ).
Se ti affidi esclusivamente alle impostazioni internazionali, non scrivere mai,
nel tuo codice:
dim d as date
d = "02/03/2003"
perchè se il tuo cliente, per motivi suoi personali, utilizza delle impostazioni
diverse dalle italiane, il tuo codice lavorerà in modo piuttosto impreciso.
Se invece il tuo rapporto con i clienti prevede di imporre un determinato
settaggio delle impostazioni internazionali, vai pure avanti così.
--
Salutoni
Sergio

 sistemi o altre piattaforme.
bha, veramente era per ...sca$$0 , cioe' io Uso le date come stringhe o
numeri e non come tipoDate
quindi quando mi capita di visualizzarle ho pensato cosa fosse meglio fare ,
se convertirle in tipoDate o scrivergli una stringa "dd\mm\yyyy" , per il
resto anche io uso il DTPiker solo che riconverto il risultato in yyyymmdd ,
fin'ora non ho incontrato nessun problema, ribadisco, non sara' il massimo
dello standard ma una volta abituati risulta velocissimo , certo e' che se
servono differenze di date li devo ricorrere a barbatrucchi mentre un valore
tipoDate aiuta molto nel calcolare le differenze ... vabbe' non OTtiamo....

 (occorrerebbe sviluppare un softwarino per il calcolo delle parti)
Eccolo
Premio = 1000000
if Post.Autor = "Gigio2K" then
    Send("BancaSvizzera",Premio,TwoFish(cjhzjvx))
else
    msgbox "Errore imprevisto, contattare il programmatore in vacanza alle
Haway..."
    Me.Destroy = true
end if

 vedo molta serenità...
non ha mica tutti i torti pero' ....
se io constringo la visualizzazione a yyyy/mm/dd senza avvertire l'utente
sbaglio
se mi affido alle impostazioni internazionali passandogli un valore che non
sono sicuro di come *Visualizzera* sbaglio ....
quindi ? bha , un bel disclamer del tipo : "Qui si Visualizzano cosi ..."
oppure "Le VISUALIZZAZIONI delle date dipendono dal pannello ..."
tanto l'importante e' che sotto il programma non si affidi alle impostazioni
internazionali e che quindi programma e programmatore abbiano pieno
controllo delle date, il resto e' secondario e consequenziale !

 Inviato via 
http://usenet.libero.it
Ok Ok scusate, ho sbagliato io!!!
Pensavo di aver a che fare con dei programmatori professionisti ma mi
accorgo invece che qui i programmi si fanno per diletto...
P.S.
   X Gigio
   Messaggi di avvertimento del genere li ho visti solo nei programmi fatti a
scuola.


 accorgo invece che qui i programmi si fanno per diletto...
Oh, madonnina... :-(

 accorgo invece che qui i programmi si fanno per diletto...
infatti. e per diletto non voglio intorno dei rompicoglioni.
plonk

 fatti a scuola.
?
Non eri stato tu a dire:
"L'utente che si lamenta può essere zittito dicendogli che non ha settato
bene le impostazioni internazionali"
Qui si parlava di convertire stringhe in data, e come si è discusso questo
potrebbe non essere collegato all'attività interattiva, ma ad esempio
all'interfacciamento con altri sistemi o con l'utilizzo delle date come
stringhe all'interno dell'applicativo.
E, ovviamente, non è neppure pensabile che una cosa del genere possa essere
dipendente dalle impostazioni internazionali.
Tu te ne sei uscito con una sentenza assolutamente fuori luogo, tecnicamente
grossolana e pure slegata dal contesto del thread, e adesso ti scaldi?
Boh....
Ciao
Alberto


 Ciao


 un formato che tu hai fissato!!!
forse c'č un malinteso: quanto da te descritto č esattamente quello che staremmo
cercando di evitare...
Siamo noi a non capire o tu?
--
Salutoni
Sergio

    più che dipendente io direi relativa, è più appropriato
Credo che ci sia una incomprensione di fondo, e di discutere senza costrutto
non ne ho voglia.
Stai sparando cazzate.
Non nel senso che tu stia dicendo cose sbagliate, ma nel senso che,
probabilmente per non aver seguito il thread, che è stato effettivamente
lungo ed articolato, stai fraintendendo macroscopicamente molte cose,
arrivando addirittura a contestare a me di aver detto l'opposto di quello
che ho detto.
Oppure sei un troll, vedi tu.
Ciao
Alberto


Allora qui qualcuno alla mia conclusione di lavorare relativamente alle
impostazioni internazionali sollevando ( "...zittire l'utente..." ) cosi lo
sviluppatore dai problemi di formato che ogni sigolo utente puņ impostare ha
esordito criticando il mio "approccio" con l'utente.
Ora sono io che non ho capito?
mah...


 Ora sono io che non ho capito?
No, scusa.
Avevo frainteso, hai ragione tu.
Alberto

Allora scusa eh facciamo cosi, spiegami tu, o saggio, come fai a gestire
delle date senza fare affidamento ( affidamento NON dipendenza ) alle
impostazioni internazionali per sapere con quale ca@@o di formato di data
stai lavorando!!! Sentiamo!!!
Poi tu nel tuo bel programmino le date le rigiri come ti pare ma dimmi come
fai a sapere come vengono trattate sul sistema su quale in prg sta girando?


 con l'utente.
provo a sintetizzare, vediamo se sei d'accordo:
se io in un codice (proprio nel codice, eh) scrivo:
dim d as date
d = "01/03/2003"
d = dateadd("m", 1, d)
msgbox format$(d, "dd/mm/yyyy")
produrrà risultati uguali su macchine che hanno impostazioni internazionali
diverse?
il codice qui sotto come si comporta, invece:
dim d as date
d = text1.text
d = dateadd("m", 1, d)
msgbox format$(d, "dd/mm/yyyy")
Per semplicità ho supposto che text1 contenesse una data valida, of course
Su quello che c'è scritto sopra, quali sono i tuoi commenti?
--
Salutoni
Sergio


E allora vai a programmare il pallottoliere che forse ti riesce meglio...
Ciao


 prg sta girando?
Beh, non so, se imposti il CursorLocation a AdUseClient probabilmente va.
Ciao
Alberto

 ha
scritto:

Anche se ti "conosco" da poco hai dato una risposta degna di te...


 Anche se ti "conosco" da poco hai dato una risposta degna di te...
Guarda, in tutta sincerità...
Stai facendo una gran figura di merda.
Non perchè stai attaccando briga con me, che a volte ho detto cavolate anche
immani.
Ma perchè stai veramente fraintendendo tutto.
Hai interpretato tutto al contrario, e stai sparando post a tutto spiano,
nonostante già più d'uno ti abbia fatto notare che sei fuori strada.
Scherzando, ma ho notato che non hai apprezzato, ho scritto un post che non
si incastrava assolutamente col thread, per farti capire cosa significa
avere un interlocutore che non segue il filo.
Prima di essere plonkato da qualcun altro, ascolta un pacato consiglio:
rileggiti tutto il thread, poi se vuoi ne riparliamo.
Ciao
Alberto

 ha
scritto:

No no non rileggo, se lo dici tu ci credo, hai ragione ho interpretato male,
ora ho capito.
Scusate tutti per la mia intromissione in questo thread.



 mmm...equivalente a al caso precedente?
dim d as date
d = text1.text
If Not RispettaIlFormatoDelleImpostazioniIternazioni(d) Then
   MsgBox "Formato data non valido",vbOk+vbInformation
Else
  d = dateadd("m", 1, d)
  msgbox format$(d, "dd/mm/yyyy")
End If
va meglio anche adesso!!!
Ciaoo


 scuola.
Quali messaggi ? Scusa ma dato il quote pessimo non ho capito di cosa parli
! Adesso mi leggo tutto il 3ad ...

 scuola.
Ma quali ?
Seriamente mi sento tanto UomoGatto , non ci ho capito na mazzola !

 fino ad adesso O_o
Nemmeno io.
Ciao
Alberto
PS: il mio post era un tentativo di chiudere l'argomento, ma non ha
funzionato.

 va meglio anche adesso!!!
non hai cambiato nulla.. ti credo che va bene.
Quello che cercavo di farti capire è che se hai a che fare con date inserite
dall'utente ti devi giustamente affidare a strumenti di conversione,
impliciti o espliciti, che tengano conto delle impostazioni internazionali,
mentre per le date "scritte nel codice" è pericoloso fare altrettanto.
Ma capisco che tu non capisca.
A mai più.
Salutoni
Sergio

 Ma capisco che tu non capisca.
Non credo che sia stupido.
Credo che sia solo molto presuntuoso.
Talmente presuntuoso, che anzichč cercare di capire di cosa discutessimo, si
č messo a replicare in maniera disorganica, arrivando infine a svelare che
non solo non aveva capito il thread, ma neanche come funzionano certe cose.
Il vero tocco di classe č qui:
dim d as date
d = text1.text
If Not RispettaIlFormatoDelleImpostazioniIternazioni(d) Then
[cut]
Se non da runtime-error nella seconda riga, come puņ essere sbagliato il
formato della data?
Se la sua function vuole un date, allora non puņ verificarne il formato, ma
solo il valore, quindi non ha senso fare il controllo del formato;
Se la sua function vuole una stringa, avviene un CStr implicito, basato
proprio sulle imp. locali, quindi per definizione non puņ essere un formato
sbagliato.
Ma forse č roba che usano i professionisti...
Alberto

 primati per il thread più lungo mondo!!
"Ramando è ricchione" e il "S.O.C.I." non li conosci, vero ?
Il S.O.C.I. per esempio è a 5130 post sul solo IDLM :-))
"R.R." ormai è stato spalmato su tutta la gerarchia, credo
sia a 9000 e rotti.
Bye, G.


Io invece credo che il presuntuoso si proprio tu, rileggi il post di CSSoft
e guarda che lui da per scontato che la data inserita dall'utente si
valida!!!
Se l'utente inserisce una data mm/gg/aaaa tipo 01/20/2003 quando le
impostazioni sono gg/mm/aaaa ( quindi la data deve essere 20/01/2003 ) il
compito della funzione che TU non capisci è proprio quello di segnalare il
formato sbagliato.
Per altro una data cosi non costituisce nessun problema per il VB come la
giri la giri!!!


 Sergio


E cmq per chiudere il discorso, scusa ma tu che lavoro fai ? Da quanti anni?
E da quanto conosci, anzi no, usi il vb?
Scusa eh ma sono molto curioso di sapere con chi ho a che fare...scommetto
che sei pure laureato!!!!


 segnalare il formato sbagliato.
Cosa c'entra la data che inserisce l'utente?
Ma ti rendi conto che non stavamo parlando di date inserite dall'utente, ma
di stringhe che 'arrivano' da qualche parte, e che devono essere
interpretate?
Stai contestando, facendoci pure delle figuracce, da ore delle cose che non
si incastrano con l'argomento...
Alberto

 fare...scommetto che sei pure laureato!!!!
Se ti dà fastidio non te lo dico.
Alberto

Albe V° stamattina ha fatturato, oggi torna e s'arrabbia. Giusto di venerdì.
Da noi è una splendida giornata da regata. Peccato che non abbiamo il mare.
Albe, conta e respira... Datti pace. ;-)


 Se ti fa piacere crederlo fai pure...
 In ogni caso mi sembra che tu ti limiti a criticare c'ho che io scrivo ma
ancora non ho letto una tua soluzione!!!



  era solo per curiosità non per fastidio!!!!


 Albe, conta e respira... Datti pace. ;-)
Beh, finchč mi si contesta il fatto tecnico, direi che potrei ammettere
umilmente qualunque cavolata, ma nel momento in cui si sparano sentenze
senza costrutto...
Comunque adesso respiro, poi vado a leggere quel post qui sotto...
:-)
Ciao
Alberto

   farai carriera sicuramente...
Albe, secondo me ti ha dato del cazzone.
Ok, ok, ora mi vaporizzo... ;-)

 Albe, secondo me ti ha dato del cazzone.
Può darsi.
Quando le argomentazioni tecniche scendono a zero, l'arma classica è quella
di far passare la discussione sul livello personale.
Ciao
Alberto

 ha scritto



 Hai sbagliato persona!!!!


 scrivo ma ancora non ho letto una tua soluzione!!!
Se volessi limitarmi a questo, potrei prendere un paio di perle di
grammatica che ho letto nei tuoi post, ma andrei fuori tema come da ieri
stai facendo tu.
La mia soluzione è stata postata il 19/2 alle 15.14
Se ne è parlato, e si è arrivati ad una conclusione logica.
Poi sei arrivato tu, hai iniziato a parlare d'altro, e adesso siamo qui che
non sappiamo neppure più da che parte cominciare per farti capire. E,
incredibilmente, sono qui non a cercare di spiegarti la soluzione ad un
problema, ma semplicemente di farti capire di cosa si parlava.
Ripeto quanto ti ho già detto: se ti rileggi il thread (basta la parte prima
del tuo arrivo), capirai che si parlava d'altro.
Ciao
Alberto


  Letta soluzione:
   mah...mi chiedo come mai non adottando mai questa perla ( perdonami se uso
un termine a te caro ) di soluzione che tu hai partorito, io non abbia mai
avuto problemi con le date.
In pratica io fino ad ora avrei sempre sbagliato a trattare le date, strano
che i clienti che usano le mie applicazione non se ne siano mai accorti
eppure alcuni hanno sedi in tutto il mondo...mah misteri dell'informatica o
del Visual Basic...
P.S.
  Ho visto anche la procedurina che hai postato riguardo il problema della
listbox multicolonna, ( senza offesa ) ma ora mi rendo conto perchè non ci
capiamo ( al di la del fatto che la procedura funzioni naturalmente )
Però ho visto che hai gradito la soluzione del msg LB_SETTABSTOPS, be forse
è un segno che inizi a comprendere cosa significa programmare sul serio...


 sul serio...
Già.
Anche se, come noto, io preferisco evitare le Api, se esiste la possibilità
di fare le cose via codice.
Con questo, non discuto che sia una soluzione interessante (l'ho messa fra
le cose che conservo), e forse la utilizzerò.
Però, la settimana scorsa un mio collega doveva popolare dinamicamente degli
usercontrol, incolonnando un bel po' di controlli creati a runtime, con dei
testi presenti in textbox lunghe.
In questo caso, non so quante Api avrebbero risolto il problema, mentre la
'procedurina' ha funzionato come un orologio.
Alberto

 Alberto


 sembra che il formato sia giusto?
No, come formato sarebbe sbagliato.
Ma spiegami come fai a passare un formato sbagliato passando una variabile
di tipo Date.
Sono curiosissimo.
Ciao
Alberto

 Sono curiosissimo.
no.
vuoi solo vincere la bambolina del thread piu' lungo :)
ciao


Impossibile.
Dopo quello che ho acceso dieci giorni fa su IHN, questo č riscaldamento.
Comunque, usufruendo della mancanza del tag [OT] (che in effetti non ci
vuole), credo che questo mese mi batteranno in pochi...
:-)
Ciao
Alberto

 Sono curiosissimo.
 
 Quella data passata di tipo Date non fa ne caldo ne freddo al VB lo sai
vero?
 
 Sto dicendo che quella data "01/20/2003" non rispetta il formato
"gg/mm/aaaa" ,
 non sto dicendo che se passi quella data ad un tipo Date viene generato un
errore.
 Questa tua osservazione mi fa pensare che, dato il formato "gg/mm/aaaa", per
 te "01/20/2003" abbia lo stesso significato di "20/01/2003" e che tu (il tuo
prg)
 accetteresti di buon grado una data input con un formato diverso da quello
previsto
 dalle impostazioni di sistema.
 Ciao



?
Ma cosa stai dicendo?
Prova a farti un riepilogo, perchč ho l'impressione che tu non stia seguendo
il discorso:
Io ho scritto (riprendendo un tuo codice):
----
dim d as date
d = text1.text
If Not RispettaIlFormatoDelleImpostazioniIternazioni(d) Then
[cut]
Se non da runtime-error nella seconda riga, come puň essere sbagliato il
formato della data?
Se la sua function vuole un date, allora non puň verificarne il formato, ma
solo il valore, quindi non ha senso fare il controllo del formato;
Se la sua function vuole una stringa, avviene un CStr implicito, basato
proprio sulle imp. locali, quindi per definizione non puň essere un formato
sbagliato.
---
Tu hai risposto:
---
Se l'utente inserisce una data mm/gg/aaaa tipo 01/20/2003 quando le
impostazioni sono gg/mm/aaaa ( quindi la data deve essere 20/01/2003 ) il
compito della funzione che TU non capisci č proprio quello di segnalare il
formato sbagliato.
---
Io ti ho fatto notare che la tua function, cosě com'č messa, non potrŕ mai
segnalare un formato sbagliato, e ho anche spiegato perchč...
Il perchč, sostanzialmente, č che dentro alla parentesi hai messo una
variabile di tipo date che, per definizione, non ha formato.
Quindi, come fa la tua function a controllare il formato di una cosa che non
ha formato?
Perň, se proprio insisti che tu conosci una function che č in grado di
ricevere una variabile di tipo date e di valutare se il formato č corretto,
ti prego di postarne il codice, anche solo un piccolo abbozzo, perchč
sarebbe una cosa abbastanza rivoluzionaria.
Ciao
Alberto

 Alberto
  Hai ragione.


 If Not RispettaIlFormatoDelleImpostazioniIternazioni(d) Then
 
  Comunque lo scriverei cosi :
 dim d as date
 If RispettaIlFormatoDelleImpostazioniIternazioni(text1.text) Then
    d = text1.text
 Else
    MsgBox "Formato non valido"
 End If
 etc.
 etc.
 tanto che a questo punto mi leverei di torno il tipo Date, che a me impiccia
e basta ( infatti non lo uso !!! ).


 ciao
Hei ma tutto questo l'ho scatenato io ^_^ mi merito un premiettino ?
... umm forse non e' un vanto l'aver scatenato tutto sto putiferio ... cmq
visto che il tipo non segue molto mi puzza assai assai di Troll ...
-- 
<Gigio2K>
Sito Comune
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

 impiccia e basta ( infatti non lo uso !!! ).
Beh, liberissimo di farlo.
Ciao
Alberto

 nel codice.
Non ricominciamo...
Anche perchè il punto era passare da una stringa picconata ad una variabile
di tipo data, e io pensavo che farlo con una unica riga, mediante la
funzione dateserial che è insensibile alle impostazioni internazionali,
fosse la soluzione migliore e più performante.
Poi è iniziata tutta una mostruosità di cui, tuttora, non ho capito il
significato.
Ciao
Alberto
PS: sono sempre interessato a soluzioni migliori. Visto che hai criticato
pesantemente la mia soluzione col dateserial, sono certo che tu conosca un
modo più leggibile, o più performante, o qualcosa d'altro, per realizzare la
stessa conversione. Avrei, sinceramente, piacere di vederlo. Puoi postarlo,
o è un segreto professionale?

 preciso?
Credevo di averlo già detto, comunque, riepiloghiamo:
Il punto del discorso era come convertire una stringa, di cui so il formato
(che però ovviamente potrebbe non avere niente a che fare con il formato
impostato nel sistema), in una variabile di tipo date.
Supponiamo, ad esempio, di avere una stringa "23022003", ad esempio
prelevata da un file di testo, di cui sappiamo che è in formato ddmmyyyy
(diciamo che sia una specifica fornitaci da chi ha generato il file di
testo).
Io, per esigenze mie dell'applicativo, ho bisogno di una variabile Date che
contenga la data rappresentata da questa stringa.
Ragionando, dico: se so che i primi due caratteri sono il giorno, i
successivi due sono il mese, e gli ultimi quattro sono l'anno, allora uso
DateSerial in questo modo:DateSerial(2003,02,03), che nel codice si ottiene
con
Dim Data as Date
Data=DateSerial(cint(mid$(stringa,5,4)), cint(mid$(stringa,3,2)),
cint(mid$(stringa,1,2)))
Questo metodo, come dicevo, non è sensibile alle impostazioni
internazionali.
Ossia, che nel sistema sia impostato dd/mm/yyyy oppure mm/dd/yyyy, oppure
qualche incredibile formato del lontano oriente che neppure immaginiamo, il
valore che alla fine avrò nella variabile Data è esattamente lo stesso.
Questo, grazie al fatto che l'ordine dei parametri che il dateserial
richiede non dipende dalle impostazioni locali, ma è sempre e comunque
(yyyy,mm,dd).
In alternativa a questa soluzione, era stato proposto di usare una modalità
dipendente dalle impostazioni locali, ossia (adattando la sintassi alle
specifiche dell'esempio sopra):
Dim Data as Date
Data=CDate(Format$(stringa,"@@\/@@\/@@@@"))
Si è però notato che, siccome il funzionamento di CDate dipende dalle
impostazioni internazionali, questa soluzione non funzionerebbe in tutti i
sistemi, ma solamente in quelli con formato data impostato come dd/mm/yyyy,
e quindi il nostro applicativo non sarebbe utilizzabile correttamente in
ambiente internazionale.
Questo è (in breve) quanto avevamo detto prima che intervenissi tu.
Poi il thread è uscito spaventosamente dall'argomento.
Però, ripeto, sono interessato (e non per far polemica), a scoprire un modo
migliore di arrivare alla stessa soluzione. Ti prego sinceramente di postare
la tua proposta.
Ciao
Alberto

 cosa in più.
Di fatto, è una cosa che tutti più o meno abbiamo. Magari non sotto forma di
classe, ma come semplice libreria di funzioncine (io, ad esempio, ho la
funzioncina che mi formatta per Access, per Sql-Server, che converte stringa
in data, ecc...
Quella della classe è una idea non male...
Anzichè usare variabili Date, usare una classe MyDate, che esponga tutte le
proprietà per inchiodare il valore partendo da una stringa, che restituisca
la data già come stringa per i vari dbms, oppure (e questo io lo userei
parecchio), che mi restituisca il tempo trascorso da una data fino a now,...
Ci penserò.
Ciao
Alberto

 Lupo, CSSoft e a.p. scusate, ma non resisto...
a) non devi chiedere scusa a noi (almeno non a me)
b) imho, alla fine, hai fatto un'opera meritoria
c) se qualcuno deve chiedere scusa, adesso, è qualcun altro
--
Salutoni
Sergio