2009-09-11 4 views
11

Mam obiekt DateTime, który może ale nie musi już zawierać informacje o dacie/godzinie. Muszę zastąpić czas moim nowym czasem, niezależnie od daty i odwrotnie. Jak to osiągnąć? Nie widzę niczego oczywistego poza tworzeniem dwóch nowych obiektów DateTime, jednego ze starą/nową datą i ze starym/nowym czasem i łączeniem. Na pewno musi być lepsza droga niż to?Zastępowanie sekcji Data lub czas w obiekcie DateTime w języku C#

Odpowiedz

12

chciałbym napisać dwa lub trzy metody rozszerzenia:

public static DateTime WithTime(this DateTime date, TimeSpan time) 
{ 
    return date.Date + time; 
} 

public static DateTime WithDate(this DateTime original, DateTime newDate) 
{ 
    return newDate.WithTime(original); 
} 

public static DateTime WithTime(this DateTime original, DateTime newTime) 
{ 
    return original.Date + newTime.TimeOfDay; 
} 

(naprawdę nie potrzebne zarówno drugich metod, ale czasami może to być prostsze, jeśli Łączysz ze sobą wiele połączeń.)

Uwaga: nie tworzysz żadnych obiektów pod względem pozycji na stercie, ponieważ DateTime jest strukturą.

12

DateTime jest strukturą niezmienną.

Jedyną opcją jest skonstruowanie nowej struktury DateTime na podstawie dwóch istniejących wartości. To najlepsze podejście. Na szczęście, jest to jedna wkładka:

DateTime CreateNewDateTime(DateTime date, DateTime time) 
{ 
    return new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second); 
} 
0

To może nie być dokładnie to, czego szukasz, ale klasa DateTime ma serię metod Add (AddMinutes(), AddDays() itp.). Mówię to nie może być to, czego szukasz, bo te zwracają DateTime, więc trzeba by zrobić coś takiego

myDate = myDate.AddMinutes(60); 
1

Gazy czas od istniejącego datetime pisząc .Date

DateTime new = oldDate.Date; 

Dodaj swój czas albo przez dodanie godziny, minuty & sekund indywidualnie

DateTime new = oldDate.Date.AddHours(14).AddMinutes(12).AddSeconds(33); 

lub wszystkie na raz

DateTime new = oldDate.Date.AddSeconds(51153); 

lub dodając przedział czasu()

DateTime new = oldDate.Date.Add(new TimeSpan(14,12,33));