2010-06-29 20 views
39

Pobieram dane z iSeries, gdzie znajdują się oddzielne pola daty i godziny. Chcę dołączyć do nich w polu DateTime w moim projekcie C#. Nie widzę sposobu, aby dodać trochę czasu do pola DateTime. Jak zasugerowałbyś wykonanie tego?Dołącz do daty i czasu do daty Czas w C#

Odpowiedz

44

W jaki sposób są przechowywane? Zakładając, że część z datą jest przechowywana jako DateTime o północy danego dnia, a jest to TimeSpan, możesz po prostu ją dodać.

DateTime date = ...; 
TimeSpan time = ...; 

DateTime result = date + time; 
+0

Myślę, że ten będzie działał najlepiej dla mnie w tej sprawie. Dzięki! –

+1

to będzie działać tylko wtedy, gdy zmienna daty ma część czasu 00:00:00, w przeciwnym razie zmienna czasowa zostanie dodana do daty i będzie to nieoczekiwany wynik. – batmaci

+2

@batmaci Tak, jest to wyraźnie określone w odpowiedzi. –

8

Możesz łatwo skonstruować TimeSpan ze swojego pola "time".

Gdy trzeba, że ​​po prostu zrobić:

TimeSpan time = GetTimeFieldData(); 
dateField = dateField.Add(time); 
67

Można to zrobić dość łatwo:

DateTime dateOnly; 
DateTime timeOnly; 
... 
DateTime combined = dateOnly.Date.Add(timeOnly.TimeOfDay); 

TimeOfDay zwraca TimeSpan, które następnie dodać do tej pory.

Edytuj (dzięki komentarzom poniżej) - aby być bezpiecznym, użyj dateOnly.Date, aby zapewnić tylko część daty.

+4

Jedna uwaga dla widza tutaj musisz się upewnić, że 'DateTime dateOnly' zawiera tylko w przeciwnym razie, z wystarczająco dużym TimeSpanem, kiedy wykonasz 'Add', zwiększysz dzień o 1! – Coops

+3

@CodeBlend ma rację, przydarzyło mi się to. Najlepszym sposobem na pokrycie siebie jest wykonanie: 'DateTime combined = dateOnly.Date.Add (timeOnly.TimeOfDay);' –

+2

Dobry połów, @RodolfoDeLosSantos! Wysłałem prośbę o zaktualizowanie rozwiązania, aby pasowało do Twojej sugestii. –

4
Datetime date = new DateTime(Date1.Year, Date1.Month, Date1.Day, Time1.Hour, Time1.Minute, Time1.Second); 
-2

Nie możesz po prostu sformatować części daty i czasu jako oddzielnych ciągów, a następnie połączyć je razem? Następnie możesz sparsować ciąg do obiektu DateTime.

+1

Niezbyt wydajne. – Lazlo

0

Pamiętaj, że dodanie czasu do daty nie jest tutaj Twoim największym problemem. Jak wspomniał o @Reed Copsey, po prostu tworzysz DateTime od daty, a następnie .Add czasu.

Należy jednak upewnić się, że data i godzina systemu iSeries (prawdopodobnie czas uniksowy) są w tej samej reprezentacji co reprezentacja .Net. Dlatego najprawdopodobniej trzeba go przekonwertować, dodając go również do DateTime 1 stycznia 1970 roku.

2

Możesz dodać TimeSpan do DateTime i napisać coś takiego.

// inside consuming function 
ISeriesObject obj = getMyObject(); 
DateTime dt = getDate(obj) + getTime(obj); 

private DateTime getDate(ISeriesObject obj) 
{ 
    //return a DateTime 
} 


private TimeSpan getTime(ISeriesObject obj) 
{ 
    //return a TimeSpan 
} 
2

ten powinien zrobić:

var output = date.Date + time.TimeOfDay; 

lub

var output = new DateTime(date.Year, date.Month, date.Day, 
          time.Hour, time.Minute, time.Second); 

przypuszczać, że obie zmienne date i time są zarówno od typu DateTime