IsDate meno tollerante SOLVED

di il
43 risposte

43 Risposte - Pagina 3

  • Re: IsDate meno tollerante SOLVED

    27/09/2023 - oregon ha scritto:


    Infatti “pippo” è una data non valida. Valutazione corretta del software.

    E in quanto tale, il codice successivo la rifiuta e chiede nuovamente.

    27/09/2023 - paoloholzl ha scritto:


    Io preferisco che il programma butti fuori come errore non gestito,

    Questo comportamento, in produzione con degli utenti collegati è disastroso.

    Su questo la penso in modo assolutamente diverso.
    La chiede nuovamente se hai messo il codice per farlo.
    E se sai che lì pippo non ci deve arrivare il codice per controllarlo e chiederlo nuovamente non ce lo metti, in particolare se scrivi migliaia di righe di codice.
    E se un giorno malauguratamente nel flusso arriva ‘pippo’ che non doveva arrivare il sistema DEVE andare in blocco altrimenti non te lo diranno mai e un giorno magari ti troverai nel DB campi vuoti o altre amenità senza capire da dove derivano.
    E ti garantisco che questo sì che è davvero disastroso.

  • Re: IsDate meno tollerante SOLVED

    Ricevi da un db. Il db come tratta la data, come.stringa o come datetime?

    Se ad inserire il dato è un utente ha senso controllare che la data non sia “pippo” ma.se.prendi i dati da un db, e il db ha il campo datetime, allora non hai bisogno di controllare perché quel dato sarà una data.

    Poi che il db lo tratti come mm-gg-aaaa o come gg/mm/aaa o come.gg-mm-aa o qualsiasi formato data valido, a te che cambia? Il tuo db importa la data e la salva come.meglio crede anche in formato numerico.

    Se hai la necessità di visualizzare la data in un formato particolare allora usi la maschera o il codice. In questo caso apri, se non esiste, un altro 3d.

    Perché arrivare a 30 risposte per girare intorno alla stessa cosa? Non cambiano le risposte.

  • Re: IsDate meno tollerante SOLVED

    27/09/2023 - sihsandrea ha scritto:


    Perché arrivare a 30 risposte per girare intorno alla stessa cosa? Non cambiano le risposte.

    Ecco, in questo caso concordo ;-))

    La tecnica non è un opinione, l'approccio deve essere corretto ed efficace… tu andresti contromano in una strada qualsiasi anche se il calcolo delle probabilità può sembrare favorevole… io no, mai e poi mai !!! …che senso avrebbe ? per ritrovarsi prima o dopo in fondo ad un barato?

  • Re: IsDate meno tollerante SOLVED

    27/09/2023 - paoloholzl ha scritto:


    
    If GG = 29 Then ' controllo bisestili divisibili per 4 e non per 100 
        If AAAA Mod 4 = 0 Then 
            If AAAA Mod 100 = 0 Then 
                EsitoValida = False 
            End If
        Else
            EsitoValida = False
        End If
    End If

    Sarà che sto invecchiando ma secondo me questo test NON è corretto.

    L'anno è bisestile se è divisibile per 4, ma se si tratta dell'anno 0 (riferito al secolo) rimane bisestile SOLO se è divisibile per 400.

    Ovvero, per capirci :

    2000 è bisestile (divisibile per 4 e per 400)
    2020 è bisestile (divisibile per 4  - non serve altro test)
    2100 NON è bisestile (divisibile per 4 ma non 400) 

    Poi che il tuo software sopravviva fino al 2100 è un altro discorso … e se anche resistesse difficilmente sarai tu a dover risolvere il bug :)

  • Re: IsDate meno tollerante SOLVED

    27/09/2023 - max.riservo ha scritto:


    27/09/2023 - paoloholzl ha scritto:


    
    If GG = 29 Then ' controllo bisestili divisibili per 4 e non per 100 
        If AAAA Mod 4 = 0 Then 
            If AAAA Mod 100 = 0 Then 
                EsitoValida = False 
            End If
        Else
            EsitoValida = False
        End If
    End If

    Sarà che sto invecchiando ma secondo me questo test NON è corretto.

    L'anno è bisestile se è divisibile per 4, ma se si tratta dell'anno 0 (riferito al secolo) rimane bisestile SOLO se è divisibile per 400.

    Ovvero, per capirci :

    2000 è bisestile (divisibile per 4 e per 400)
    2020 è bisestile (divisibile per 4  - non serve altro test)
    2100 NON è bisestile (divisibile per 4 ma non 400) 

    Poi che il tuo software sopravviva fino al 2100 è un altro discorso … e se anche resistesse difficilmente sarai tu a dover risolvere il bug :)

    Perché usare la pietra focaia quando hai a disposizione l'accendino?

    https://learn.microsoft.com/it-it/dotnet/api/system.datetime.isleapyear?view=net-7.0

    Comunque il 3d riguardava la verifica che un dato fosse di tipo data non se l'anno fosse bisestile.

    Chissà se implementeranno la funzione DateTime.IsMondiaSoccerliYear(Int32) per sapere quando si giocano i mondiali di calcio.

  • Re: IsDate meno tollerante SOLVED

    27/09/2023 - sihsandrea ha scritto:

    
    If GG = 29 Then ' controllo bisestili divisibili per 4 e non per 100 
        If AAAA Mod 4 = 0 Then 
            If AAAA Mod 100 = 0 Then 
                EsitoValida = False 
            End If
        Else
            EsitoValida = False
        End If
    End If

    Chissà se implementeranno la funzione DateTime.IsMondiaSoccerliYear(Int32) per sapere quando si giocano i mondiali di calcio.

    Si sì… l’hanno già implementata… ;-)

  • Re: IsDate meno tollerante SOLVED

    27/09/2023 - sihsandrea ha scritto:


    Perché usare la pietra focaia quando hai a disposizione l'accendino?

    https://learn.microsoft.com/it-it/dotnet/api/system.datetime.isleapyear?view=net-7.0

    Comunque il thread riguarda Access e non dotnet quindi credo che il tuo suggerimento sia inapplicabile.

    27/09/2023 - sihsandrea ha scritto:

    Comunque il 3d riguardava la verifica che un dato fosse di tipo data non se l'anno fosse bisestile.

    Comunque il thread riporta, a mio avviso, un codice errato … e mi è sembrato corretto evidenziarlo.

    Poi esistono metodi anche più semplici, in Access, per verificare se una data è bisestile, ma siccome non è l'argomento del thread non è il caso di parlarne …

  • Re: IsDate meno tollerante SOLVED

    27/09/2023 - max.riservo ha scritto:


    Comunque il thread riguarda Access e non dotnet quindi credo che il tuo suggerimento sia inapplicabile.

    Mi sono perso fra i task aperti e ho mandato il link errato….

    Ma come scrivi tu, per ogni linguaggio del cavo… c'è la funzione per il bisestile. 

    Perché scrivere a mano un codice che esiste già? Solo per arrivare a 40 risposte?

    27/09/2023 - max.riservo ha scritto:


    Comunque il thread riporta, a mio avviso, un codice errato … e mi è sembrato corretto evidenziarlo.

    Ma allora, come hai fatto notare a me dell'equivoco, fai notare che non serve sapere se un anno è bisestile per verificare che un formato data è corretto.

    È stato chiesto il perché la funzione restituisce true sia nel formato gg-mm-aaaa che mm-gg-aaaa ed è stato risposto che la funzione verifica se l'argomento è una data non che tipo di formattazione ha. Potrebbe anche essere “01 gennaio 2023” è pur sempre una data.

  • Re: IsDate meno tollerante SOLVED

    27/09/2023 - sihsandrea ha scritto:


    27/09/2023 - max.riservo ha scritto:


    Comunque il thread riguarda Access e non dotnet quindi credo che il tuo suggerimento sia inapplicabile.

    Mi sono perso fra i task aperti e ho mandato il link errato….

    Ma come scrivi tu, per ogni linguaggio del cavo… c'è la funzione per il bisestile. 

    Perché scrivere a mano un codice che esiste già? Solo per arrivare a 40 risposte?

    Attendiamo il link alla funzione bisestile per Access … 40 o 41 risposte … direi che poco cambia.

    27/09/2023 - sihsandrea ha scritto:


    27/09/2023 - max.riservo ha scritto:


    Comunque il thread riporta, a mio avviso, un codice errato … e mi è sembrato corretto evidenziarlo.

    Ma allora, come hai fatto notare a me dell'equivoco, fai notare che non serve sapere se un anno è bisestile per verificare che un formato data è corretto.

    Mi sono permesso di far notare che il codice, a mio avviso, è errato per il semplice motivo che qualcuno potrebbe volerlo utilizzare per i propri scopi : che sia inutile nella funzione richiesta da Paolo per me è irrilevante in quanto sono state fornite funzioni alternative rispondenti a quanto richiesto.

  • Re: IsDate meno tollerante SOLVED

    Ragazzi … io concordo con voi in quanto esiste una verità per ogni post che si è succeduto.

    A parte il fatto che non mi è molto chiaro il contesto e questo cambia gli scenari etc etc etc …

    Personalmente e mi ripeto… il problema non stà nel fatto se la funzione restituisce una data corretta oppure no, il formato, se bisestile oppure no, etc… il fatto è che la funzione “funziona” !!! e riflette correttamente il test che si cerca di fare.

    Il problema, se si vuole chiamare problema, è lo scenario nel quale si rende necessario utilizzare la funzione IsDate e similari.

    Utilizzare la funzione serve per mitigare un problema di data che nasce all'origine di un certo processo ?
    Utilizzare la funzione serve per validare una data perchè non si sa se possa essere inserita correttamente da un utente ? 
    Utilizzare la funzione serve per validare una data restituita e/o presente in un file da trattare ?

    Ma qui si deve parlare non di correttezza di ciò che restituisce la funzione (che funziona e anche bene)…. qui si deve parlare del contesto, dello scenario che porta ad utilizzarla. 
    Un analisi a posteriori per mettere una toppa ad un problema, non è certo la soluzione. Se esiste un problema che rende necessario usare la IsDate, beh, lo stesso deve essere risolto alla radice, nel senso che il problema non deve porsi a posteriori perchè è sempre troppo tardi e difetta all'origine di una attenta analisi e quant'altro.

    Questo per dire che criticare ciò che fa la IsDate è del tutto fuori luogo e sbagliato perchè dipende da come e quando la si usa. 
    Un utilizzo errato restituisce risultati errati, un utilizzo corretto restituisce risultati corretti.

    E mi ripeterò dicendo ancora una volta e per chiudere, che la Tecnica di Analisi e di Programmazione, non è un Opinione

    P.s.
    io per primo, nei vari linguaggi di programmazione che tratto da più di 35 anni, ogni volta che mi trovo difronte ad un argomento dove posso avere delle incertezze, prediligo il confronto e la conferma da chi sicuramente potrebbe saperne più di me o avere più esperienze in merito.
    Non mi autoconvinco e sposo a spada tratta la mia Opinione che nasce dall'esperienza, studio e approfondimenti… con il confronto con altre esperienze cerco di usare tecniche e approcci più consoni sia in termini di analisi che di programmazione.
    Questo solo per ribadire che la Tecnica non è un Opinione, non la si piega verso i propri convincimenti.

    Comunque la funzione IsDate funziona e anche molto bene, se la si usa nel modo e nel contesto corretto.

  • Re: IsDate meno tollerante SOLVED

    Secondo me non serve inventare l'acqua calda, eviterei di infilarmi in funzioni potenzialmente fallaci e creative se non serve.

    Quella di Paolo, è evidente che non serve.

    Il metodo proposto da Antonio che sfrutta le funzioni NATIVE è l'unica soluzione che prescinde da Bisestile o altre cose, funziona sempre proprio perchè delega alle funzioni native…

    Semplifichiamo.

  • Re: IsDate meno tollerante SOLVED

    28/09/2023 - @Alex ha scritto:


    Secondo me non serve inventare l'acqua calda, eviterei di infilarmi in funzioni potenzialmente fallaci e creative se non serve.

    Concordo e ne sono pienamente convinto !

    Soprattutto delegare al nativo e semplificare !

    Ottimo !!!

  • Re: IsDate meno tollerante SOLVED

    28/09/2023 - max.riservo ha scritto:


    Attendiamo il link alla funzione bisestile per Access … 40 o 41 risposte … direi che poco cambia.

    https://599cd.com/blog/display-article.asp?ID=2524

  • Re: IsDate meno tollerante SOLVED

    28/09/2023 - @Alex ha scritto:


    Secondo me non serve inventare l'acqua calda, eviterei di infilarmi in funzioni potenzialmente fallaci e creative se non serve.

    Quella di Paolo, è evidente che non serve.

    Il metodo proposto da Antonio che sfrutta le funzioni NATIVE è l'unica soluzione che prescinde da Bisestile o altre cose, funziona sempre proprio perchè delega alle funzioni native…

    Semplifichiamo.

    Se non fossi stato convinto che doveva esserci una strada più semplice non sarei partito col primo post, mi sarei fatto la funzione punto e basta. Ho risolto con la mia funzione quando sembrava non ci fosse di meglio.
    Quando ho visto qualcosa di decisamente meglio l'ho adottata volentieri.

Devi accedere o registrarti per scrivere nel forum
43 risposte