[C#] 일주일의 시작 시간을 어떻게 알 수 있습니까?

C #의 현재 시간 만 알고있는주의 시작 (일요일 및 월요일)을 어떻게 찾을 수 있습니까?

다음과 같은 것 :

DateTime.Now.StartWeek(Monday);



답변

확장 방법을 사용하십시오. 그들은 모든 것에 대한 답입니다. 😉

public static class DateTimeExtensions
{
    public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek)
    {
        int diff = (7 + (dt.DayOfWeek - startOfWeek)) % 7;
        return dt.AddDays(-1 * diff).Date;
    }
}

다음과 같이 사용할 수 있습니다.

DateTime dt = DateTime.Now.StartOfWeek(DayOfWeek.Monday);
DateTime dt = DateTime.Now.StartOfWeek(DayOfWeek.Sunday);


답변

내가 생각해 낼 수있는 가장 빠른 방법은 다음과 같습니다.

var sunday = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek);

다른 요일을 시작 날짜로 설정하려면 DayOfWeek 값을 끝에 추가하면됩니다.

var monday = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek + (int)DayOfWeek.Monday);

var tuesday = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek + (int)DayOfWeek.Tuesday); 


답변

좀 더 장황하고 문화에 대한 인식 :

System.Globalization.CultureInfo ci =
    System.Threading.Thread.CurrentThread.CurrentCulture;
DayOfWeek fdow = ci.DateTimeFormat.FirstDayOfWeek;
DayOfWeek today = DateTime.Now.DayOfWeek;
DateTime sow = DateTime.Now.AddDays(-(today - fdow)).Date;


답변

유창한 DateTime 사용 :

var monday = DateTime.Now.Previous(DayOfWeek.Monday);
var sunday = DateTime.Now.Previous(DayOfWeek.Sunday);


답변

추악하지만 적어도 올바른 날짜를 돌려줍니다.

시스템에 의해 설정된 시작 시간 :

    public static DateTime FirstDateInWeek(this DateTime dt)
    {
        while (dt.DayOfWeek != System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek)
            dt = dt.AddDays(-1);
        return dt;
    }

없이:

    public static DateTime FirstDateInWeek(this DateTime dt, DayOfWeek weekStartDay)
    {
        while (dt.DayOfWeek != weekStartDay)
            dt = dt.AddDays(-1);
        return dt;
    }


답변

문화 안전 답변과 확장 방법 답변을 결합합시다.

public static class DateTimeExtensions
{
    public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek)
    {
        System.Globalization.CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;
        DayOfWeek fdow = ci.DateTimeFormat.FirstDayOfWeek;
        return DateTime.Today.AddDays(-(DateTime.Today.DayOfWeek- fdow));
    }
}


답변

이것은 당신에게 이전 일요일을 줄 것입니다 (제 생각에) :

DateTime t = DateTime.Now;
t -= new TimeSpan ((int) t.DayOfWeek, 0, 0, 0);