Domanda

Ho problemi a decidere quale sia il modo migliore per gestire e archiviare le misurazioni del tempo.

Ho un'app che ha una casella di testo che consente agli utenti di inserire l'ora nel formato hh:mm:ss o mm:ss.

Quindi stavo pianificando di analizzare questa stringa, tokenizzarla sui due punti e creare TimeSpan (o utilizzare TimeSpan.Parse() e aggiungere semplicemente uno "00:" al caso mm:ss) per la mia logica aziendale.OK?

Come posso memorizzarlo come in un database?Quale sarebbe il tipo di campo?DateTime sembra sbagliato.Non voglio che l'ora 00:54:12 venga memorizzata come 1901-01-01 00:54:12 che sembra un po' scarsa?

È stato utile?

Soluzione

TimeSpan ha un Int64 Zecche proprietà che è possibile archiviare e a costruttore che accetta un valore in tick.

Altri suggerimenti

Penso che il più semplice sia semplicemente convertire l'input dell'utente in un numero intero di secondi.Quindi 54:12 == 3252 secondi, quindi memorizza i 3252 nel tuo database o ovunque.Quindi, quando è necessario visualizzarlo all'utente, è possibile riconvertirlo.

Per periodi inferiori a un giorno, usa semplicemente i secondi come hanno detto altri.

Per periodi più lunghi, dipende dal tuo motore db.Se SQL Server, prima della versione 2008, desideri un datetime.Va bene: puoi semplicemente ignorare la data predefinita 1/1/1900 che avranno tutti.Se sei abbastanza fortunato da avere SQL Server 2008, puoi utilizzare tipi di dati di data e ora separati.Il vantaggio derivante dall'utilizzo di un tipo datetime/time reale è l'utilizzo della funzione DateDiff per confrontare le durate.

La maggior parte dei database ha una sorta di tipo di intervallo di tempo.La risposta dipende dal database di cui stai parlando.Per Oracle, è semplicemente un NUMERO in virgola mobile che rappresenta il numero di giorni (compresi i giorni frazionari).Puoi aggiungerlo/sottrarlo a/da qualsiasi tipo DATE e otterrai la risposta giusta.

Come conteggio intero di secondi (o millisecondi, a seconda dei casi)

Stai raccogliendo sia l'ora di inizio che l'ora di fine?In tal caso, potresti utilizzare il tipo di dati "timestamp", se il tuo DBMS lo supporta.In caso contrario, proprio come un tipo di data/ora.Ora, hai detto che non vuoi che la parte della data venga memorizzata, ma considera il caso in cui il periodo di tempo abbraccia la mezzanotte: inizi alle 23:55:01 e finisci alle 00:05:14, ad esempio, a meno che lì dentro c'è anche la data.Esistono funzioni standard integrate per restituire il tempo trascorso (in secondi) tra due valori di data e ora.

Vai con numeri interi per secondi o minuti.I secondi sono probabilmente migliori.non ti prenderai mai a calci per aver scelto qualcosa con troppa precisione.Inoltre, per la tua interfaccia utente, considera l'utilizzo di più input di testo in modo da non doverti preoccupare che l'utente digiti effettivamente ":" correttamente.È anche molto più semplice aggiungere altri vincoli come i valori dei minuti e dei secondi che contengono 0-59.

e il tipo int dovrebbe farlo, memorizzandolo come secondi e analizzandolo avanti e indietro

http://msdn.microsoft.com/en-us/library/ms187745.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top