Operatory dodawania i odejmowania są przeciążone dla typów DateTimei TimeSpanzgodnie z oczekiwaniami. To wszystko jest całkiem proste. - Jaki dokładnie problem napotkałeś?
Ta odpowiedź jest oczywiście poprawna, ale możesz jej również użyć, (a - b).Daysjeśli interesuje Cię całkowita liczba dni intzamiast doubledziesiętnej reprezentacji częściowej różnicy dni.
PFranchise,
25
to zwróci 1 mniej dni, 08/31 / 2013-08 / 01/2013 = 31, ale zwraca tylko 30.
JRB,
60
@JasRajBishnoi - możesz sprawdzić swoją matematykę. Co to jest 31-1?
Greg Beech,
33
JasRaj miał również rację w tym sensie, że włączając obie daty, zwraca różnicę mniejszą o jeden dzień. Wszystko zależy od perspektywy.
Fahad Abid Janjua,
28
@FahadAbidJanjua To nie jest kwestia ani perspektywa, ale kwestia czasu, to znaczy części czasowej daty. 08.08.2013 - 01.01.2013 naprawdę oznacza 08/31/2013 00:00:00 - 08/01/2013 00:00:00, co wyjaśnia, dlaczego jest to 30 dni, ponieważ dzień 31.08.2013 jest dopiero zaczyna. To wyjaśnia również, dlaczego podczas zapytania o właściwość / pole DateTime właściwym warunkiem uzyskania zakresu jest „DateTimeProperty > = FromDate && DateTimeProperty < ToDate.AddDays (1)”
Miguel Veloso
159
Najlepsza odpowiedź jest prawidłowa, ale jeśli chcesz tylko CAŁE dni jako int i z przyjemnością rezygnujesz z komponentu czasu w dacie, rozważ:
(EndDate.Date-StartDate.Date).Days
Ponownie zakładając StartDatei EndDatesą w rodzaju DateTime.
Najlepsza odpowiedź, ponieważ „liczba dni” zwykle oznacza całe dni. Warto zauważyć, że Daysnie kończy się na 365 (jak inne właściwości, takie jak Hours, Minutes, Secondktórego wartość jest Nax gdzie zaczyna się następny wyższy nieruchomość). Jest taki sam, TotalDaysale bez ułamków dnia i wraca intzamiast double.
Tim Schmelter
Czy to zawsze będzie działać zgodnie z oczekiwaniami? Na przykład, jeśli jeden z porównywanych dni to „dzień wiosny” czasu letniego, czy odjęcie może dać przedział czasu wynoszący 23 godziny, a jeśli tak, to wartość .Dzień w tym 23-godzinnym przedziale czasu będzie wynosić 0 ? (Sam próbowałem z tym eksperymentować, ale moje dotychczasowe wyniki nie są jednoznaczne - stackoverflow.com/questions/43644252/... )
Jon Schneider
Tak, właśnie tego potrzebowałem - najcenniejsza odpowiedź cmon teraz nikt nie chce myśleć o minutach i sekundach przy obliczaniu dni
solujic
jeśli minęło tylko 1,5 dnia. Funkcja dni pokaże tylko 1 dzień? jak mogę to zmienić, aby wyświetlać 2 dni? po prostu muszę zawsze dodawać + 1 dzień?
CDrosos,
2
Poproś o to, ponieważ bardzo często potrzebujesz „KALENDARZA dni między dwiema datami”, a nie tylko „liczby 24-godzinnych odstępów”. Na przykład musisz wyświetlić na osi czasu etykietę „X dni temu”. W tym przypadku różnica między „poniedziałkiem 23:59” a „wtorek 7:00 rano” powinna wynosić „1 dzień (temu)”… Więc ta .Dateczęść jest naprawdę przydatna. Mam nadzieję, że wyrazię się jasno
Alex
138
Użyj obiektu TimeSpan, który jest wynikiem odjęcia daty:
W każdym razie, aby uzyskać dni pomiędzy w formacie DateTime? Ponieważ potrzebuję każdej daty, aby zmodyfikować określone pole w tabelach :) Edytuj: Mam go i opublikowałem jako odpowiedź poniżej. Dzięki
sys_debug,
4
DateTime xmas = new DateTime (DateTime.Today.Year, 12, 25); sprawi, że będzie działać z roku na rok, nie tylko 2009 roku :)
1
Subtract () to OperatorOverload dla DateTimes, więc jest taki sam "(xmas - DateTime.Today) .TotalDays - tylko dłużej.
Marc
20
W przypadku gdy ktoś chce numer całych dni jako podwójne ( a, btypu DateTime):
Będzie to zawsze liczba całkowita (tj. N.00000), ponieważ część Data jest zawsze północą.
JoeNCA,
20
// Difference in days, hours, and minutes.TimeSpan ts =EndDate-StartDate;// Difference in days.int differenceInDays = ts.Days;// This is in intdouble differenceInDays= ts.TotalDays;// This is in double// Difference in Hours.int differenceInHours = ts.Hours;// This is in intdouble differenceInHours= ts.TotalHours;// This is in double// Difference in Minutes.int differenceInMinutes = ts.Minutes;// This is in intdouble differenceInMinutes= ts.TotalMinutes;// This is in double
Różnicę możesz także uzyskać w sekundach, milisekundach i tyknięciach.
To naprawdę pomogło mi najlepiej, ponieważ moja różnica dat wynosiła pół dnia, ale mimo to, gdy Ameryka jest o 1 dzień za Australią, muszę zauważyć, że różnica jest o jeden dzień. Inne odpowiedzi wspomniane w tym wątku zawierały zero lub podwójną liczbę poniżej 1, której nie potrzebuję.
Barry Guvenkaya
To najlepsza odpowiedź, gdy celem jest sprawdzenie, czy data minęła już następnego dnia, bez względu na to, czy pod względem czasu nie jest to pełny 24-godzinny dzień.
oneberenjena
4
Dla początkujących takich jak ja napotkasz ten drobny problem, w prostej linii, z przykładową konwersją na int :
int totalDays =Convert.ToInt32((DateTime.UtcNow.Date- myDateTime.Date).TotalDays);
To oblicza całkowitą liczbę dni od dzisiaj (DateTime.UtcNow.Date) do żądanej daty (myDateTime.Date).
Jeśli myDateTime jest wczorajszą lub starszą datą niż dzisiaj, da to dodatni wynik (+) liczby całkowitej.
Z drugiej strony, jeśli myDateTime jest jutro lub w przyszłości, da to wynik ujemny (-) liczba całkowita ze względu na reguły dodawania.
DateTime d =DateTime.Now;DateTime c =DateTime.Now;
c = d.AddDays(145);string cc;Console.WriteLine(d);Console.WriteLine(c);var t =(c - d).Days;Console.WriteLine(t);
cc =Console.ReadLine();
Ten fragment kodu może rozwiązać pytanie, ale wyjaśnienie naprawdę pomaga poprawić jakość posta. Pamiętaj, że w przyszłości odpowiadasz na pytanie czytelników, a ci ludzie mogą nie znać przyczyn Twojej sugestii kodu. Staraj się również nie tłoczyć kodu objaśniającymi komentarzami, ponieważ zmniejsza to czytelność zarówno kodu, jak i objaśnień!
protectedvoidCalendar1_SelectionChanged(object sender,EventArgs e){DateTime d =Calendar1.SelectedDate;// int a;TextBox2.Text= d.ToShortDateString();string s =Convert.ToDateTime(TextBox2.Text).ToShortDateString();string s1 =Convert.ToDateTime(Label7.Text).ToShortDateString();DateTime dt =Convert.ToDateTime(s).Date;DateTime dt1 =Convert.ToDateTime(s1).Date;if(dt <= dt1){Response.Write("<script>alert(' Not a valid Date to extend warranty')</script>");}else{string diff = dt.Subtract(dt1).ToString();Response.Write(diff);Label18.Text= diff;Session["diff"]=Label18.Text;}}
Ten kod jest zły na wiele sposobów! 1) Wiele kodów Winforms niezwiązanych z pytaniem. 2) Przewodowy sposób wyświetlania skrzynek wiadomości za pomocą (Myślę, że kontrolka WebBrowser). 3) za pomocą kontrolki WebBrowser, aby wyświetlić tekst, który jest już wyświetlany na etykiecie. 4) Użycie OperatorOverload Subtract () (domyślnie dla operacji „-”), które jest używane w każdym przypadku, jeśli wykonasz „MyDateA - MyDateB”. 5) Żadnego wyjaśnienia tego stosu kodu.
DateTime
iTimeSpan
zgodnie z oczekiwaniami. To wszystko jest całkiem proste. - Jaki dokładnie problem napotkałeś?Odpowiedzi:
Zakładając
StartDate
iEndDate
są typuDateTime
:źródło
(a - b).Days
jeśli interesuje Cię całkowita liczba dniint
zamiastdouble
dziesiętnej reprezentacji częściowej różnicy dni.Najlepsza odpowiedź jest prawidłowa, ale jeśli chcesz tylko CAŁE dni jako int i z przyjemnością rezygnujesz z komponentu czasu w dacie, rozważ:
Ponownie zakładając
StartDate
iEndDate
są w rodzajuDateTime
.źródło
Days
nie kończy się na 365 (jak inne właściwości, takie jakHours
,Minutes
,Second
którego wartość jest Nax gdzie zaczyna się następny wyższy nieruchomość). Jest taki sam,TotalDays
ale bez ułamków dnia i wracaint
zamiastdouble
..Date
część jest naprawdę przydatna. Mam nadzieję, że wyrazię się jasnoUżyj obiektu TimeSpan, który jest wynikiem odjęcia daty:
źródło
Myślę, że zrobi to, co chcesz:
źródło
źródło
W przypadku gdy ktoś chce numer całych dni jako podwójne (
a
,b
typuDateTime
):źródło
Różnicę możesz także uzyskać w sekundach, milisekundach i tyknięciach.
źródło
Możesz tego spróbować
źródło
Dla początkujących takich jak ja napotkasz ten drobny problem, w prostej linii, z przykładową konwersją na int :
To oblicza całkowitą liczbę dni od dzisiaj (DateTime.UtcNow.Date) do żądanej daty (myDateTime.Date).
Jeśli myDateTime jest wczorajszą lub starszą datą niż dzisiaj, da to dodatni wynik (+) liczby całkowitej.
Z drugiej strony, jeśli myDateTime jest jutro lub w przyszłości, da to wynik ujemny (-) liczba całkowita ze względu na reguły dodawania.
Miłego kodowania! ^ _ ^
źródło
Użycie przedziału czasu rozwiązałoby problemy, ponieważ ma wiele atrybutów:
źródło
Dla
a
ib
jako dwaDateTime
typy:źródło
Najpierw zadeklaruj klasę, która powróci później:
Użyj przycisku, aby wywołać powyższą klasę. Oto przykład:
źródło
Możesz użyć kodu poniżej:
źródło
Uzyskaj różnicę między dwiema datami, a następnie uzyskaj dni od:
źródło
źródło