Jak mogę zmienić tylko czas w mojej DateTime
zmiennej „s”?
DateTime s = some datetime;
Nie można zmienić wartości DateTime - jest ona niezmienna. Można jednak zmienić zmienną, aby miała nową wartość. Najłatwiejszym sposobem na zmianę tego czasu jest utworzenie TimeSpan z odpowiednim czasem i użycie właściwości DateTime.Date:
DateTime s = ...;
TimeSpan ts = new TimeSpan(10, 30, 0);
s = s.Date + ts;
s
będzie teraz tego samego dnia, ale o 10:30.
Zwróć uwagę, że DateTime
pomija zmiany czasu letniego, reprezentując „naiwny” czas gregoriański w obu kierunkach (patrz sekcja Uwagi w DateTime
dokumentacji ). Jedynymi wyjątkami są : .Now
i .Today
pobierają bieżący czas systemowy, który odzwierciedla te zdarzenia w momencie ich wystąpienia.
Właśnie to zmotywowało mnie do rozpoczęcia projektu Noda Time , który jest teraz gotowy do produkcji. Jego ZonedDateTime
typ jest „świadomy” poprzez połączenie go z tz
pozycją bazy danych .
Add
podając zerowy przedział czasu? Twoje wyrażenie jest równoważnes.Date
, ale dłuższe ...DateTime
s (jeden na randkę, a drugi na czas), możesz to zrobić:var result = date.Date + time.TimeOfDay;
time
nie powinien byćDateTime
. (Oczywiście użyłbym Nody Time, ale ...)Dobra, nurkuję z moją sugestią, metodą przedłużenia:
Wtedy zadzwoń:
Należy zauważyć, że to rozszerzenie zwraca nowy obiekt daty, więc nie można tego zrobić:
Ale możesz to zrobić:
źródło
Datetime.Today.Add(time.TimeOfDay)
. Jest tak, ponieważ wewnętrznie konstruktor nie dokonuje żadnych korekt opartych na kalendarzu, z wyjątkiem rozliczenia roku przestępnego dla części daty. Tj.DateTime
Jest „naiwną” implementacją pod względemdatetime
modułu Pythona .W ten sposób zachowujesz swoją datę, a jednocześnie wstawiasz nowe godziny, minuty i sekundy według własnych upodobań.
źródło
.AddMilliseconds()
razie potrzeby.jedna wkładka
przywróci dzisiejszą datę o godzinie 4:30:00, zastąpię DateTime.Now dowolnym obiektem daty
źródło
DateTime jest niezmiennym typem, więc nie możesz go zmienić .
Można jednak utworzyć nową instancję DateTime na podstawie poprzedniej instancji. W twoim przypadku wygląda na to, że potrzebujesz właściwości Date, a następnie możesz dodać TimeSpan reprezentujący porę dnia.
Coś takiego:
źródło
Jeśli masz już czas przechowywany w innym
DateTime
obiekcie, możesz użyć tejAdd
metody.TimeOfDay
Nieruchomość jestTimeSpan
przedmiotem i może zostać przekazany doAdd
metody. A ponieważ korzystamy zDate
właściwościdateToUse
zmiennej, otrzymujemy tylko datę i dodajemy przedział czasu.źródło
Najprostsze rozwiązanie:
A jeśli potrzebujesz określonego formatu daty i godziny:
źródło
Wykonano: dzisiaj = 9/04/15 00:00:00
źródło
Stało się to w tym poście, gdy szukałem tej samej funkcjonalności, która mogłaby zrobić to, czego chciał facet. Weź pierwotną datę i zastąp część czasu
źródło
Ponieważ
DateTime
jest to niezmienne, należy utworzyć nową instancję, gdy należy zmienić komponent daty. Niestety nie ma wbudowanej funkcjonalności do ustawiania poszczególnych komponentówDateTime
instancji.Korzystanie z następujących metod rozszerzenia
możesz ustawić poszczególne
DateTime
elementy, takie jakźródło
Jeśli masz DateTime, taki jak 2014/02/05 18:19:51 i chcesz tylko 2014/02/05, możesz to zrobić:
źródło
Dodanie .Date do daty ustawia ją na północ (00:00).
Uwaga Równoważny SQL to
CONVERT(DATETIME, CONVERT(DATE, @MyDate))
Tym, co czyni tę metodę tak dobrą, jest to, że można ją szybko pisać i jest łatwa do odczytania. Bonusem jest to, że nie ma konwersji z ciągów.
To znaczy Aby ustawić dzisiejszą datę na 23:30, użyj:
Możesz oczywiście zastąpić DateTime.Now lub MyDate dowolną wybraną datą.
źródło
W rzeczywistości nie można zmienić czasu po jego utworzeniu. Ale możesz go łatwo utworzyć za pomocą wielu konstruktorów: https://docs.microsoft.com/en-us/dotnet/api/system.datetime.-ctor?view=netframework-4.7.2
Na przykład, jeśli chcesz utworzyć DateTime zmieniający sekundy, możesz po prostu to zrobić:
źródło
źródło
Użyj
Date.Add
i dodajNew TimeSpan
nowy czas, który chcesz dodaćźródło
Podczas konstruowania
DateTime
obiektu użyj konstruktora, który pozwala określić czas:Jeśli masz już
DateTime
obiekt i chcesz zmienić czas, możesz dodać minuty, godziny lub sekundyDateTime
za pomocą prostych metod:Zauważ, jak musimy „zapisać” wynik każdego wywołania metody do
myDateTime
zmiennej. Wynika to z faktu, żeDateTime
jest niezmienny, a jego metody po prostu tworzą nowe wystąpienia z dodanymi dodatkowymi godzinami / minutami / sekundami.Jeśli chcesz dodać godziny i minuty (i / lub sekundy) i jednocześnie, możesz uprościć kod, dodając
TimeSpan
DateTime
zamiast tego oryginał :Jeśli chcesz ustawić bezwzględne godziny / minuty / sekundy, zamiast dodawać do istniejących wartości, możesz użyć wyżej wspomnianego
DateTime
konstruktora i ponownie użyć wartości dla roku / miesiąca / dnia wcześniej:źródło
Oto metoda, której możesz użyć, aby zrobić to za Ciebie, użyj jej w ten sposób
Oto metoda, prawdopodobnie jest lepszy sposób, ale właśnie to wymyśliłem:
źródło
Właśnie natrafiłem na ten post, ponieważ miałem podobny problem, w którym chciałem ustawić czas dla obiektu Entity Framework w MVC, który pobiera datę z widoku (datepicker), więc komponent czasu to 00:00:00, ale potrzebuję to aktualny czas. Na podstawie odpowiedzi w tym poście wymyśliłem:
źródło
źródło
Możesz przypisać wartość początkową do nowej
DateTime
wartości na wiele różnych sposobów:Metoda przedłużenia
DateTime
następnie używając
ChangeTime
:za pomocą metod Dodaj
za pomocą przedziału czasu
przy użyciu wartości początkowej
źródło
Co jest złego w metodzie DateTime.AddSeconds, w której można dodawać lub odejmować sekundy?
źródło
możesz dodać wartości + ve / -ve w parametrze.
źródło
Czy to nie rozwiązuje twoich problemów?
źródło
Wolę to:
źródło
Użyj w ten sposób:
Console.WriteLine (DateTime.Now.ClearTimeFrom (eTimeFragment.hours))
to musi zwrócić: 2016-06-06 00: 00: 00.000
źródło
Najlepszym rozwiązaniem jest:
źródło
Spróbuj tego
źródło
tutaj jest getto, ale działa :)
źródło
dt.AddSeconds(0-dt.Seconds).AddSeconds(newSecondsValue)
ale nie poleciłbym tego.