簡體   English   中英

如何獲取特定星期中給定日期的日期?

[英]How to get the date of a given day in a specific week?

我想獲取給定星期幾的日期。 星期由輸入的日期決定。

例如,如果我想要以下日期的星期五:

  1. 06/27/2018
  2. 07/04/2018
  3. 07/07/2018

我期望作為結果:

  1. 06/29/2018
  2. 07/06/2018
  3. 07/06/2018

在此,星期定義為星期一至星期日。

您可以根據DayOfWeek通過一些聰明的數學來做到這一點:

public DateTime GetDay(DateTime source, DayOfWeek dayOfWeek, 
    DayOfWeek weekStartsOn = DayOfWeek.Monday)
{
    var offset = (int)source.DayOfWeek - (int)weekStartsOn;;
    if(offset < 0)
    {
        offset = offset + 7;
    }
    return source.AddDays(-offset + (int)dayOfWeek - (int)weekStartsOn);
}

並像這樣使用它:

var someDate = ...; //Get a date from somewhere

var friday = GetDay(someDate, DayOfWeek.Friday);
var monday = GetDay(someDate, DayOfWeek.Monday);

如果您的一周從星期日開始,則只需使用可選的第三個參數,例如:

var friday = GetDay(someDate, DayOfWeek.Friday, DayOfWeek.Sunday);

對DavidG答案的當前版本的修改:

static DateTime GetDay(DateTime source, DayOfWeek dayOfWeek)
{
  const int offsetSinceMondayIsFirstDayOfWeek = 7 - (int)DayOfWeek.Monday;
  return source.AddDays(((int)dayOfWeek + offsetSinceMondayIsFirstDayOfWeek) % 7
    - ((int)source.DayOfWeek + offsetSinceMondayIsFirstDayOfWeek) % 7);
}

這考慮到詢問者將星期一視為一周的第一天。 如果你想周六周的第一天,只需更換MondaySaturday以上。

在特殊情況下,您將星期日視為一周的第一天,它簡化為DavidG的原始方法:

static DateTime GetDay(DateTime source, DayOfWeek dayOfWeek)
{
  return source.AddDays((int)dayOfWeek - (int)source.DayOfWeek);
}

因為BCL的DayOfWeek枚舉類型已經在Saturday= 6 )和Sunday= 0 )之間“環繞”。


http://chartsbin.com/view/41671上,有一張世界地圖,顯然顯示了在不同地區中一周的第一天。

    public void TestMethod1 ( )
    {

        DateTime date = DateTime.Now;
        DateTime friday = date.AddDays( (int)DayOfWeek.Friday - (int)date.DayOfWeek );
        Console.WriteLine( friday.ToString( ) );

    }
   using System;
      using System.Globalization;

   public class Example
   {
      public static void Main()
      {
         DateTime dateValue = new DateTime(2008, 6, 11);
         Console.WriteLine(dateValue.ToString("ddd", 
                           new CultureInfo("fr-FR")));    
      }
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM