Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126

    Convertire in DateTime un valore numerico

    ciao, ho un intero che vorrei convertire in data, ed ho provato:
    codice:
    int miadata = 6082006;
    Convert.ToDateTime(miadata);
    ma mi viene fuori l'eccezione:
    Cast da 'Int32' a 'DateTime' non valido.
    problema simile se quell'intero fosse stato una stringa.. viene fuori l'eccezione:
    Stringa non riconosciuta come valore DateTime valido.
    ho anche provato ad aggiungere lo "0" davanti al numero "6" ma non è quello il problema..
    qualche idea?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Un valore intero non è direttamente convertibile in una data in quanto non è possibile comprendere il significato che si vuole attribuire a ciascuna delle cifre che lo compongono, poiché la variabile intera potrebbe assumere qualsiasi valore nel range previsto per il tipo Int32.

    Risulta anche difficile comprendere come si arrivi ad una simile situazione, cioè a voler convertire un intero qualsiasi in data: trattandosi di una data, perché si arriva ad avere a che fare con un numero intero?

    Insomma, è un'operazione che non ha un senso ed è il probabile risultato di un errore a monte nella struttura logica del programma (forse l'esito di una conversione da stringa ad intero, che non ha molto senso, in quanto si deve convertire da stringa a data direttamente).

    :master:
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da alka
    Un valore intero non è direttamente convertibile in una data in quanto non è possibile comprendere il significato che si vuole attribuire a ciascuna delle cifre che lo compongono, poiché la variabile intera potrebbe assumere qualsiasi valore nel range previsto per il tipo Int32.

    Risulta anche difficile comprendere come si arrivi ad una simile situazione, cioè a voler convertire un intero qualsiasi in data: trattandosi di una data, perché si arriva ad avere a che fare con un numero intero?

    Insomma, è un'operazione che non ha un senso ed è il probabile risultato di un errore a monte nella struttura logica del programma (forse l'esito di una conversione da stringa ad intero, che non ha molto senso, in quanto si deve convertire da stringa a data direttamente).

    :master:
    ci sono arrivato perchè il campo predisposto a contenere la data è di tipo numerico, io mi limito a prelevare il valore di un controllo datetimepicker e a convertirlo in ShortDateTimeString, a togliergli gli slash "/" e poi a metterlo nel campo del database.
    Risulta quindi che il campo conterrà ad esempio la data di oggi con questo formato 6082006.
    Praticamente faccio questo:
    codice:
    DateTime dataordineSelezionata = dtpFrmInsOrdData.Value;
                        int dataordine = Convert.ToInt32(dataordineSelezionata.ToShortDateString().Replace("/", ""));
    tu cosa mi consigli di fare?

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da dops
    ci sono arrivato perchè il campo predisposto a contenere la data è di tipo numerico
    Quando un campo predisposto a contenere una data è di tipo numerico, allora dovrebbe già nascere qualche sospetto che ci sia qualcosa che non va.

    Originariamente inviato da dops
    io mi limito a prelevare il valore di un controllo datetimepicker e a convertirlo in ShortDateTimeString, a togliergli gli slash "/" e poi a metterlo nel campo del database.
    Risulta quindi che il campo conterrà ad esempio la data di oggi con questo formato 6082006.
    La proprietà Value del controllo DateTimePicker è di tipo DateTime, quindi non esiste alcun bisogno di trasformarlo in stringa, togliere barre, convertirlo in intero e compiere qualsiasi altra operazione non necessaria. Così com'è, è già del valore corretto, come intuitivamente ci si dovrebbe aspettare che sia (perché mai un controllo calendario, che consente di scegliere date e ore, dovrebbe restituire un valore di tipo intero?).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da alka
    Quando un campo predisposto a contenere una data è di tipo numerico, allora dovrebbe già nascere qualche sospetto che ci sia qualcosa che non va.


    La proprietà Value del controllo DateTimePicker è di tipo DateTime, quindi non esiste alcun bisogno di trasformarlo in stringa, togliere barre, convertirlo in intero e compiere qualsiasi altra operazione non necessaria. Così com'è, è già del valore corretto, come intuitivamente ci si dovrebbe aspettare che sia (perché mai un controllo calendario, che consente di scegliere date e ore, dovrebbe restituire un valore di tipo intero?).

    Ciao!
    il fatto è che io non voglio che mi restituisca l'ora.. mi bastava la data..
    insomma tu che mi consigli di fare? di convertire il campo del db in stringa? ok, ma per l'ora?

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da dops
    il fatto è che io non voglio che mi restituisca l'ora.. mi bastava la data..
    Ma quella è solamente una questione di formattazione. Puoi ignorarla in seguito.

    Originariamente inviato da dops
    insomma tu che mi consigli di fare? di convertire il campo del db in stringa? ok, ma per l'ora?
    E' un problema apparente. Un campo data/ora contiene necessariamente una data ed un'ora, è intrinseco al tipo di dato.

    E' possibile solamente escludere l'informazione dell'ora in fase di visualizzazione modificando il formato che viene applicato quando il valore data/ora viene convertito nella sua forma testuale per essere mostrato.

    Se vuoi proprio "resettare" l'ora, crea una nuova istanza (termine improprio, visto che parliamo di una struttura, di un value type e non di un reference type) di DateTime usando l'apposito costruttore nella versione in overload che accetta solo giorno, mese e anno, passando a quei campi i rispettivi valori estratti dal DateTime che restituisce il calendario.

    In ogni caso, però, in seguito dovrai formattare il valore rimuovendo la "mezzanotte" inserita implicitamente, quindi non la vedo come operazione necessaria.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da alka
    Ma quella è solamente una questione di formattazione. Puoi ignorarla in seguito.


    E' un problema apparente. Un campo data/ora contiene necessariamente una data ed un'ora, è intrinseco al tipo di dato.

    E' possibile solamente escludere l'informazione dell'ora in fase di visualizzazione modificando il formato che viene applicato quando il valore data/ora viene convertito nella sua forma testuale per essere mostrato.

    Se vuoi proprio "resettare" l'ora, crea una nuova istanza (termine improprio, visto che parliamo di una struttura, di un value type e non di un reference type) di DateTime usando l'apposito costruttore nella versione in overload che accetta solo giorno, mese e anno, passando a quei campi i rispettivi valori estratti dal DateTime che restituisce il calendario.

    In ogni caso, però, in seguito dovrai formattare il valore rimuovendo la "mezzanotte" inserita implicitamente, quindi non la vedo come operazione necessaria.
    Sospetto una cosa.. il tuo discorso fila.. ci mancherebbe ma, e correggimi se sbaglio, quello che mi stai dicendo preclude l'utilizzo di un campo del db dedicato al formato Data/ora. Se così è, purtroppo stò lavorando su un database che volendo fare uno sforzo possiamo considerarlo relazionale (in realtà lo è) ma che allo stesso tempo è obsoleto. Stò parlando di DB2 sotto AS400 da non confondere con il DB2 sotto altri sistemi.. in realtà si chiama DB/400, che è limitato in certe funzioni.. e non perchè come ho detto prima è solo obsoleto, ma proprio perchè l'utilizzo che ne viene fatto è concettualmente quello di interfacciarsi ad una logica di programmazione procedurale con linguaggi non ad oggetti.. tipo l'RPG ILE ..
    Un programmatore che lavora con rpg avrebbe semplicemente substringato il campo per recuperare la data
    Al momento devo fare anch'io la stessa cosa.. purtroppo..

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da dops
    Sospetto una cosa.. il tuo discorso fila.. ci mancherebbe ma, e correggimi se sbaglio, quello che mi stai dicendo preclude l'utilizzo di un campo del db dedicato al formato Data/ora.
    Ti basta sapere qual è il tipo del campo e come viene interpretato lato .NET attraverso il driver ODBC/OLEDB specifico.

    Se non è data/ora, di che tipo è?

    Al contrario, se è un campo identificato con il tipo DateTime, che il DB sia vecchio, nuovo, medievale, marziano, non ha importanza.

    Continuo a non capire proprio il problema, visto che poi - alla fine - salvo le conversioni errate, cercavi comunque di memorizzare un valore di questo tipo nel DB (usando appunto una struttura DateTime, che però volevi ricavare da un intero).
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da alka
    Ti basta sapere qual è il tipo del campo e come viene interpretato lato .NET attraverso il driver ODBC/OLEDB specifico.
    no.. il tipo datetime o simile non esiste.. è quello che stò cercando di dire..

    Continuo a non capire proprio il problema, visto che poi - alla fine - salvo le conversioni errate, cercavi comunque di memorizzare un valore di questo tipo nel DB (usando appunto una struttura DateTime, che però volevi ricavare da un intero).
    no, nel database ho inserito un valore numerico ricavato da un tipo datetime (datetimepicker.Value), cercando di convertirlo ovviamente..

    Il problema non sussiste se i tuoi suggerimenti fanno capo al concetto che il campo del db deve essere predisposto ad accettare un valore con un formato qualsiasi di data..
    Siccome questo tipo di campo non esiste.. devo provvedere con artifici vari (substring etc.).
    La conversione da intero a datetime era solo per visualizzare la data in un certo formato partendo da un intero (o anche una stringa) recuperato dal db..

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Mi sono perso... come accedi al DB? che classi usi? che driver usi? di che tipo è il campo?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.