2010-06-25 12 views
38

Sto lavorando con un vecchio database mysql in cui una data viene archiviata (senza un orario) come datetime e un'ora viene memorizzata come stringa (senza un Data).Combina la data e l'ora in cui la data è un DateTime e l'ora è una stringa

In C# ho quindi un DateTime con un valore come 2010-06-25 12:00:00 AM e una stringa con un valore come 15:02.

Qual è il modo più conciso per combinare questi senza un sovraccarico?

ho provato un paio di metodi tra cui:

DateTime NewDateTime = DateTime.Parse(OldDateTime.ToString("yyyy-MM-dd ") + TimeString); 

Non mi piace la conversione del DateTime esistente in una stringa e aggiungendo il tempo.

Posso convertire la stringa del tempo in una data, ma poi ottengo la data odierna e aggiungerla come un numero di tick al vecchio datetime non è corretto.

Nota: non preoccuparti della convalida, viene eseguita altrove. L'ora viene rappresentata utilizzando il formato 24 ore senza secondi.

risposta

60

È possibile utilizzare TimeSpan.Parse per analizzare il tempo, e quindi aggiungere il risultato alla data:

DateTime newDateTime = oldDateTime.Add(TimeSpan.Parse(timeString)); 
+0

buona soluzione. @ Jeffel, vorrei usarlo e segnare la risposta di dtb corretta. –

+0

Non posso credere di aver dimenticato di usare 'TimeSpan' - questo è esattamente ciò che era necessario. – JYelton

0

Credo che tu stia preoccuparsi della conversione di stringa troppo. Combinando insieme i 2 elementi di stringa si risparmiano comunque ulteriori parsing di stringhe di date che molto probabilmente saranno più costose.

Si ripeterà molte volte o un semplice passaggio in un processo più ampio?

8
var dt = new DateTime(2010, 06, 26); // time is zero by default 
var tm = TimeSpan.Parse("01:16:50"); 
var fullDt = dt + tm; // 2010-06-26 01:16:50 
-1

Sono abbastanza sicuro che è possibile combinare e convertire questi valori in un timestamp utilizzando SQL.

+3

Colpire il database per queste cose è una pessima idea. Il tuo programma sarà molto più lento e all'improvviso avrà forti dipendenze esterne senza una buona ragione. – simendsjo

4

ho usato qualcosa di simile a ciò che simendsjo dice, tranne che ho continuato ad avere come un DateTime

DateTime date = Convert.ToDateTime(txtTrainDate.Text); 
DateTime time = Convert.ToDateTime(ddTrainTime.SelectedValue); 
DateTime dtCOMPLTDTTM = new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second); 
+0

Buono per quando si desidera combinare la parte "tempo" di un valore "DateTime' e la parte" data "di un altro valore" DateTime'. – mmcrae

Problemi correlati