Mi stavo chiedendo se voi ragazzi sapete come ottenere la data del lunedì della settimana delle correnti in base alla data odierna?Ottieni la data del primo lunedì della settimana?
cioè 2009-11-03 passato e 2009-11-02 ottiene rinviato indietro
/M
Mi stavo chiedendo se voi ragazzi sapete come ottenere la data del lunedì della settimana delle correnti in base alla data odierna?Ottieni la data del primo lunedì della settimana?
cioè 2009-11-03 passato e 2009-11-02 ottiene rinviato indietro
/M
Questo è quello che uso (probabilmente non internazionalizzata):
DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
DateTime monday = input.AddDays(delta);
Sì, infatti: Non internazionalizzato. Il lunedì non è sempre il primo giorno della settimana. –
È possibile ottenere il primo giorno della settimana utilizzando: CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek –
In realtà il primo giorno della settimana in base alla cultura non interessa in questo caso; l'OP vuole il lunedì della settimana, non il primo giorno della settimana. –
Qualcosa di simile potrebbe funzionare
DateTime dt = DateTime.Now;
while(dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1);
Sono sicuro che c'è un modo più bello tho :)
Prova questo:
public DateTime FirstDayOfWeek(DateTime date)
{
var candidateDate=date;
while(candidateDate.DayOfWeek!=DayOfWeek.Monday) {
candidateDate=candidateDate.AddDays(-1);
}
return candidateDate;
}
EDIT per completezza: sovraccarico per la data odierna:
public DateTime FirstDayOfCurrentWeek()
{
return FirstDayOfWeek(DateTime.Today);
}
Perché il ciclo ??, ci sono modi per farlo senza un ciclo.Vedi le risposte di seguito. –
La risposta Pondium può cercare in avanti in alcuni casi. Se si desidera solo Ricerca all'indietro penso che dovrebbe essere:
DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
if(delta > 0)
delta -= 7;
DateTime monday = input.AddDays(delta);
Questa dovrebbe essere la risposta corretta in quanto gestisce la domenica, cioè FirstDayOfWeek è lunedì, quindi se domenica è la data di immissione dovrebbe restituire il lunedì prima. La risposta accettata no. –
+1 Se l'input è 1/1/2017 (una domenica), questo codice restituisce il 26/12/2016 come primo giorno della settimana! Non 1/1/2017 (che la risposta accettata dà!) –
Funziona anche per 01/01/2019 = 31/12/2018! –
var now = System.DateTime.Now;
var result = now.AddDays(-((now.DayOfWeek - System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek + 7) % 7)).Date;
Probabilmente tornerà con Lunedi. A meno che non si stia utilizzando una cultura in cui il lunedì non è il primo giorno della settimana.
Che dire:
CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek
Perché non utilizzare soluzione nativa?
La domanda è di ottenere la data specifica (es. 2015-11-20) non il giorno in cui è definito come il primo giorno. –
public static class DateTimeExtension
{
public static DateTime GetFirstDayOfWeek(this DateTime date)
{
var firstDayOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
while (date.DayOfWeek != firstDayOfWeek)
{
date = date.AddDays(-1);
}
return date;
}
}
Internazionale qui. Penso che come estensione possa essere più utile.
Dai un'occhiata a questa domanda: http://stackoverflow.com/questions/38039/how-can-i-get-the-datetime-for-the-start-of-the-week –