Jak będę w stanie uzyskać datę czwartku w bieżącym tygodniu? Na przykład, w czwartek o tej bieżącego tygodnia jest 7/8/2010Znajdź konkretną datę w bieżącym tygodniu
Odpowiedz
Można to zrobić (alebit niezgrabnie) z istniejącym .NET DateTime. Sztuką jest użycie enum DayOfWeek
jako liczby całkowitej - ponieważ oznacza dni Sun - Sat w porządku rosnącym numerycznym (0-6).
DateTime someDay = DateTime.Today;
var daysTillThursday = (int)someDay.DayOfWeek - (int)DayOfWeek.Thursday;
var thursday = someDay.AddDays(daysTillThursday);
Albo jeszcze prościej:
var today = DateTime.Today;
var thursday = today.AddDays(-(int)today.DayOfWeek).AddDays(4);
OK, przeprowadziłem test na 2 miliony iteracji, a mój algorytm zegary w 300ns i twój algorytm (druga część) zegary w 200ns. – ChaosPandion
@ChaosPandion: Interesujące. Upewnij się, że w teście wydajności rozliczasz czas JIT, uruchamiając każdy przypadek testowy dwukrotnie i odrzucając wyniki pierwszego uruchomienia. W przeciwnym razie możesz zobaczyć wypaczone wyniki ... – LBushkin
@LBushkin - Hmmm, spadłem tylko 1 bieg z testu. – ChaosPandion
Sprawdź tę bibliotekę: http://datetimeextensions.codeplex.com/
Z przykładów na stronie głównej:
DateTime nextFriday = DateTime.Now.Next(DayOfWeek.Friday);
private static DateTime GetDayOfWeek(DayOfWeek dayOfWeek)
{
var date = DateTime.Now;
if (date.DayOfWeek != dayOfWeek)
{
var direction = date.DayOfWeek > dayOfWeek ? -1D : 1D;
do
{
date = date.AddDays(direction);
} while (date.DayOfWeek != dayOfWeek);
}
return date;
}
Nie trzeba pętli, aby uzyskać odpowiedź. –
@Steven - Wyślij odpowiedź, jeśli masz inny algorytm. – ChaosPandion
Chciałbym, ale inni mnie do tego pobili. –
Pseudo kod do znalezienia najbliższy czwartek:
for 0 to 3 as x
if today + x days is Thursday
return (today + x days)
if today - x days is Thursday
return (today - x days)
Pseudo kod znaleźć czwartek w tym tygodniu:
lookForward = true
lookBackward = true
FirstDayOfTheWeek = Sunday
for 0 to 6 as x
if today + x days is FirstDayOfTheWeek
lookForward = false
if today - x days is FirstDayOfTheWeek
lookBackward = false
if lookForward and today + x days is Thursday
return (today + x days)
if lookBackward and today - x days is Thursday
return (today - x days)
Niestety, nie znam C# :)
Ładne ćwiczenia ... :) –
Mam nadzieję, że przyda się komuś, szukając rozwiązania w innym języku. – Dolph
DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek).AddDays(4)
Zarówno ty, jak i LBushkin zarejestrowali tę odpowiedź w ciągu kilku sekund. Jednak dałem mu kredyt, ponieważ jego przykład był skuteczniejszy (tylko jedno połączenie z Today) i wyjaśnił to. –
A jego odpowiedź da poprawny wynik w ciągu kilku milisekund północy, podczas gdy moja nie. – Curt
Również prawdziwe. W rzeczywistości myślę, że można bezpiecznie generalizować, mówiąc, że jeśli zamierzasz używać bieżącego znacznika czasu więcej niż jeden raz w metodzie, powinieneś rozważyć jego buforowanie, aby upewnić się, że jesteś bezpieczny od warunków brzegowych. Jest również (nieco) szybszy. –
// This is fixed...
int thursday = 4;
int difference = thursday - (int)DateTime.Now.DayOfWeek;
DateTime thursdayThisWeek = DateTime.Now.Date.AddDays(difference);
- 1. Pobierz datę poniedziałku w bieżącym tygodniu w PHP 4
- 2. Uzyskaj datę na poniedziałek i piątek w bieżącym tygodniu (PHP)
- 3. PHP sprawdź, czy daty są w bieżącym tygodniu
- 4. Python wybierz losową datę w bieżącym roku
- 5. Wypracować datę czwartej soboty w bieżącym miesiącu
- 6. Czy otrzymasz w tym tygodniu datę w Postgres?
- 7. Znajdź konkretną klasę z wielu w jQuery
- 8. Android - jak ustawić alarm na konkretną datę
- 9. Zaplanuj pracę w urządzeniu Gearman na konkretną datę i godzinę
- 10. Znajdź pola wejściowe w bieżącym wierszu tabeli z klasą
- 11. Znajdź datę dnia przy użyciu JQuery
- 12. Znajdź datę pierwszego poniedziałku po podanej dacie
- 13. Zdobądź najnowszą piątkową datę SQL
- 14. Znajdź bazę danych z konkretną tabelą LUB Znajdź tabelę w każdej bazie danych SQL Server
- 15. SQL - Znajdź datę najbliżej bieżącej daty
- 16. Znajdź datę wygaśnięcia magazynu kluczy Androida
- 17. Wysyłaj powiadomienia w określonym dniu i czasie w każdym tygodniu.
- 18. Hg - Znajdź znaczniki, które "obejmują" konkretną wersję pliku
- 19. Perl: Biorąc pod uwagę numer roku i tygodnia, jak mogę uzyskać pierwszą datę w tym tygodniu?
- 20. Znajdź datę ostatnią niedzielę października w ASP.NET C#
- 21. Znajdź minimalną i maksymalną datę w tablicy używając LINQ?
- 22. Odzyskaj poniedziałkową datę bieżącego tygodnia
- 23. Uruchamiaj zadanie raz w tygodniu na Heroku
- 24. pokaż tylko posty utworzone w zeszłym tygodniu
- 25. JavaScript - znajdź datę następnej zmiany czasu (standardowa lub dzienna)
- 26. php - znajdź datę tego samego dnia tygodnia za ostatni rok
- 27. Bash: Rurociągi Znajdź w Grep
- 28. usunąć konkretną kolumnę w numpy
- 29. Znajdź nieskończoną pętlę w toku?
- 30. Liczba niedziel w bieżącym miesiącu
... chyba że system stanie rozważyć piątek być początek tygodnia, w którym to przypadku ten czwartek bieżącego tygodnia będzie 7/15/2010. Oczywiście bardzo mało prawdopodobne jest, że system uzna piątek za początek tygodnia, ale nie jest to prawdopodobnie poniedziałek na początku tygodnia. Być może będziesz musiał wziąć to pod uwagę, ponieważ otrzymasz inny wynik w niedzielę. –
@Dr. W: Dobra uwaga; pytanie powinno określać, który dzień tygodnia jest uważany za rozpoczynający się. Zwykle jest niedziela, ale rozsądnie może być poniedziałek. –
Właśnie powiedziano mi wcześniej, że we Włoszech poniedziałek uważany jest za początek tygodnia. –