সপ্তাহের সংখ্যা থেকে তারিখ গণনা করুন


135

যে কেউ সপ্তাহের প্রথম দিনের তারিখ পাওয়ার সহজ উপায় জানেন (সোমবার ইউরোপে)। আমি বছর এবং সপ্তাহের নম্বর জানি? আমি সি # এ এটি করতে যাচ্ছি।


দৃ related়ভাবে সম্পর্কিত, সম্ভবত সদৃশ: স্ট্যাকওভারফ্লো.com
জন রাশ

উত্তর:


251

@ হেনহোল্টারম্যানের সমাধানের সাথে আমারও সমস্যা ছিল, এমনকি @ রবিনএন্ডারসনের ঠিক করাও।

আইএসও 8601 স্ট্যান্ডার্ড পড়ার বিষয়টি ইস্যুটি সুন্দরভাবে সমাধান করে। প্রথম বৃহস্পতিবার লক্ষ্য হিসাবে ব্যবহার করুন এবং সোমবার নয়। নীচের কোডটি ২০০৯ এর 53 সপ্তাহের জন্যও কাজ করবে।

public static DateTime FirstDateOfWeekISO8601(int year, int weekOfYear)
{
    DateTime jan1 = new DateTime(year, 1, 1);
    int daysOffset = DayOfWeek.Thursday - jan1.DayOfWeek;

    // Use first Thursday in January to get first week of the year as
    // it will never be in Week 52/53
    DateTime firstThursday = jan1.AddDays(daysOffset);
    var cal = CultureInfo.CurrentCulture.Calendar;
    int firstWeek = cal.GetWeekOfYear(firstThursday, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

    var weekNum = weekOfYear;
    // As we're adding days to a date in Week 1,
    // we need to subtract 1 in order to get the right date for week #1
    if (firstWeek == 1)
    {
        weekNum -= 1;
    }

    // Using the first Thursday as starting week ensures that we are starting in the right year
    // then we add number of weeks multiplied with days
    var result = firstThursday.AddDays(weekNum * 7);

    // Subtract 3 days from Thursday to get Monday, which is the first weekday in ISO8601
    return result.AddDays(-3);
}       

3
আমি এখানে প্রদত্ত প্রায় প্রতিটি সমাধান চেষ্টা করেছি, এই একমাত্র এখনই আমার জন্য সঠিকভাবে কাজ করে। বর্তমানে, এটি ফেব্রুয়ারী, 2012 এর 7 তম n সপ্তাহ সপ্তাহটি # 6। এই কোডটি আমাকে সপ্তাহের শুরুর তারিখ হিসাবে 6 ফেব্রুয়ারি সঠিকভাবে দেয়। অন্যান্য সমাধানগুলি আমাকে 13 ই ফেব্রুয়ারী দিয়েছে, যা আসলে # 7 সপ্তাহের শুরু তারিখ।
হাউকুর হাফ

1
কবজির মতো কাজ করে .. কয়েকটি ডেটা পরীক্ষিত: পেস্টবিন.com / mfx8s1vq সমস্ত কাজ ত্রুটিহীন! ধন্যবাদ মিকেল!
মিটচেল

1
@ রবিনওয়াসন-অ্যান্ডারসন আপনি এই প্রশ্নটি পুনরায় পুনর্বিবেচনা করেছেন ভাল জিনিস: ডি 6 আরও ভোট এবং আমি "সঠিক নয়" সঠিক উত্তরটি দিয়ে বেঁধে দেব।
মিকেল সোভেনসন

2
পরামর্শ: কোনও সার্বজনীন 'সঠিক' উত্তর নেই বলেই পদ্ধতির নামের "ISO8601" পার্ট তৈরি করুন।
হেন্ক হলটারম্যান

1
@ মুফ্লিক্স আমি এসকিউএল এবং তারিখগুলি / ক্যালেন্ডারগুলি সম্পর্কে জানতে যথেষ্ট জানি না - তবে সিএলআর করলে কাজ হবে doing
মিকারেল সুইভেনস

36

আমি হেন্ক হলটারম্যান সরবরাহিত সমাধান পছন্দ করি। তবে কিছুটা বেশি সংস্কৃতি স্বাধীন হতে আপনাকে বর্তমান সংস্কৃতির জন্য সপ্তাহের প্রথম দিনটি পেতে হবে (এটি সর্বদা সোমবার নয়):

using System.Globalization;

static DateTime FirstDateOfWeek(int year, int weekOfYear)
{
  DateTime jan1 = new DateTime(year, 1, 1);

  int daysOffset = (int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek - (int)jan1.DayOfWeek;

  DateTime firstMonday = jan1.AddDays(daysOffset);

  int firstWeek = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(jan1, CultureInfo.CurrentCulture.DateTimeFormat.CalendarWeekRule, CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek);

  if (firstWeek <= 1)
  {
    weekOfYear -= 1;
  }

  return firstMonday.AddDays(weekOfYear * 7);
}

আমি এটিকে মেনেক্সে যুক্ত করেছি, ক্যালেন্ডার এবং ডেটটাইমফর্ম্যাটিনফোর একটি এক্সটেনশন পদ্ধতি হিসাবে। ক্রেডিটের জন্য আমি এই উত্তরে ক্রস-রেফারেন্সও দিয়েছি।
আতিফ আজিজ

1
এটি আমার মেশিনে সঠিকভাবে কাজ করে না। এটি 2010 এর পরিবর্তে 0010 সহ একটি তারিখ দেখায়। এটি নেট নেটওয়ার্কের কাঠামোতে বা এই ফাংশনে সমস্যা কিনা তা আমি জানি না। সুন্দর চেষ্টা করুন, যাইহোক ...
এডুয়ার্ডো জাভিয়ের

6
firstMondayএমন কোনও কিছুর জন্য একটি খারাপ পরিবর্তনশীল নাম যা সোমবার নাও হতে পারে। =)
এমএফ্লোডিন

11

আপডেট :। নেট কোর 3.0 এবং .NET স্ট্যান্ডার্ড 2.1 এই ধরণের সাথে প্রেরণ করা হয়েছে।

ভাল খবর! .NET কোরটিতে যুক্ত করার জন্য একটি অনুরোধ অনুরোধটিSystem.Globalization.ISOWeek সবেমাত্র একত্রিত হয়েছে এবং বর্তমানে 3.0 রিলিজের জন্য রয়েছে। আশা করি এটি অন্যান্য। নেট প্ল্যাটফর্মগুলিতে খুব অদূর ভবিষ্যতে প্রচার করবে।

এটি ISOWeek.ToDateTime(int year, int week, DayOfWeek dayOfWeek)গণনা করার জন্য আপনার পদ্ধতিটি ব্যবহার করতে সক্ষম হওয়া উচিত ।

আপনি এখানে সোর্স কোডটি পেতে পারেন ।


9

সবচেয়ে সহজ উপায় সম্ভবত বছরের প্রথম সোমবার খুঁজে পাওয়া এবং তারপরে সপ্তাহের প্রাসঙ্গিক সংখ্যা যুক্ত করা। এখানে কিছু নমুনা কোড। এটি এক সপ্তাহের সংখ্যাটি 1 থেকে শুরু করে ধরে নেওয়া হয়:

using System;

class Test
{
    static void Main()
    {
        // Show the third Tuesday in 2009. Should be January 20th
        Console.WriteLine(YearWeekDayToDateTime(2009, DayOfWeek.Tuesday, 3));
    }

    static DateTime YearWeekDayToDateTime(int year, DayOfWeek day, int week)
    {
        DateTime startOfYear = new DateTime (year, 1, 1);

        // The +7 and %7 stuff is to avoid negative numbers etc.
        int daysToFirstCorrectDay = (((int)day - (int)startOfYear.DayOfWeek) + 7) % 7;

        return startOfYear.AddDays(7 * (week-1) + daysToFirstCorrectDay);
    }
}

4
হ্যাঁ, তবে বছরের প্রথম সোমবারটি আগের বছরের 52 | 53 সপ্তাহের মধ্যে থাকতে পারে।
হেন্ক হলটারম্যান

1
এটি নির্ভর করে আপনি কীভাবে জিনিসগুলি সংজ্ঞায়িত করতে চান। দুর্ভাগ্যক্রমে এখানে আমাদের কাছে প্রচুর তথ্য নেই ... আমি আশা করি এটি কার্যকর হলেও কার্যকর হবে।
জন স্কিটি

3

ব্যক্তিগতভাবে আমি সপ্তাহের দিনটি পেতে সংস্কৃতির তথ্যের সদ্ব্যবহার করতাম এবং সংস্কৃতির প্রথম সপ্তাহে লুপ করতাম। আমি এটি সঠিকভাবে ব্যাখ্যা করছি কিনা তা নিশ্চিত নই, এখানে একটি উদাহরণ রয়েছে:

    public DateTime GetFirstDayOfWeek(int year, int weekNumber)
    {
        return GetFirstDayOfWeek(year, weekNumber, Application.CurrentCulture);
    }

    public DateTime GetFirstDayOfWeek(int year, int weekNumber,
        System.Globalization.CultureInfo culture)
    {
        System.Globalization.Calendar calendar = culture.Calendar;
        DateTime firstOfYear = new DateTime(year, 1, 1, calendar);
        DateTime targetDay = calendar.AddWeeks(firstOfYear, weekNumber);
        DayOfWeek firstDayOfWeek = culture.DateTimeFormat.FirstDayOfWeek;

        while (targetDay.DayOfWeek != firstDayOfWeek)
        {
            targetDay = targetDay.AddDays(-1);
        }

        return targetDay;
    }

3

ফ্লুয়েন্ট ডেটটাইম ব্যবহার করুন http://fluentdatetime.codeplex.com/

        var year = 2009;
        var firstDayOfYear = new DateTime(year, 1, 1);
        var firstMonday = firstDayOfYear.Next(DayOfWeek.Monday);
        var weeksDateTime = 12.Weeks().Since(firstMonday);

2

আইএসও 8601: 1988 অনুসারে যে বছরের প্রথম সপ্তাহে সুইডেনে ব্যবহৃত হয় তা হ'ল প্রথম সপ্তাহে নতুন বছরের মধ্যে কমপক্ষে চার দিন থাকে।

সুতরাং যদি আপনার সপ্তাহ সোমবার শুরু হয় যে কোনও বছরের প্রথম বৃহস্পতিবার প্রথম সপ্তাহের মধ্যে। আপনি এটি থেকে ডেটএড বা ডেটডিফ করতে পারেন।


2

ধরে নিচ্ছি সপ্তাহের সংখ্যাটি 1 থেকে শুরু হয়

DateTime dt =  new DateTime(YearNumber, 1, 1).AddDays((WeekNumber - 1) * 7 - (WeekNumber == 1 ? 0 : 1));
return dt.AddDays(-(int)dt.DayOfWeek);

এটি আপনাকে দেওয়া যে কোনও সপ্তাহের প্রথম দিন give আমি এটিতে খুব বেশি পরীক্ষা করে নিই না, তবে দেখে মনে হচ্ছে এটি কার্যকর হয়। এটি ওয়েবে পাওয়া অন্যগুলির চেয়ে ছোট সমাধান, তাই ভাগ করে নিতে চেয়েছিল।


খারাপ উত্তর ডেটটাইম ব্যবহার করা দরকার P new DateTime(1,1,YearNumber)
জামেয়েক

পার্স ব্যবহারের পরিবর্তে একটি নতুন ডেটটাইম তৈরি করতে কোড আপডেট করেছে। এটা দেরি হয়ে গেছে. ;)
কুইনজি


2

এইটি আমার পক্ষে কাজ করেছিল, এটি বিভিন্ন সংস্কৃতির সাথে সূত্রটি পরীক্ষা করার জন্য প্যারামিটার হিসাবে একটি সংস্কৃতিফোন আশা করার সুবিধাও রয়েছে। খালি থাকলে, এটি বর্তমান সংস্কৃতি সম্পর্কিত তথ্য পায় ... বৈধ মানগুলি যেমন: "এটি", "এন-ইউএস", "ফ্র", ... এবং আরও and কৌশলটি হ'ল বছরের প্রথম দিনের সপ্তাহের সংখ্যাটি বিয়োগ করা, এটি প্রথম দিনটি প্রথম সপ্তাহের মধ্যে রয়েছে তা বোঝাতে 1 হতে পারে। আশাকরি এটা সাহায্য করবে.

Public Shared Function FirstDayOfWeek(ByVal year As Integer, ByVal weekNumber As Integer, ByVal culture As String) As Date
    Dim cInfo As System.Globalization.CultureInfo
    If culture = "" Then
        cInfo = System.Globalization.CultureInfo.CurrentCulture
    Else
        cInfo = System.Globalization.CultureInfo.CreateSpecificCulture(culture)
    End If
    Dim calendar As System.Globalization.Calendar = cInfo.Calendar
    Dim firstOfYear As DateTime = New DateTime(year, 1, 1, calendar)
    Dim firstDayWeek As Integer = calendar.GetWeekOfYear(firstOfYear, cInfo.DateTimeFormat.CalendarWeekRule, cInfo.DateTimeFormat.FirstDayOfWeek)
    weekNumber -= firstDayWeek
    Dim targetDay As DateTime = calendar.AddWeeks(firstOfYear, weekNumber)
    Dim fDayOfWeek As DayOfWeek = cInfo.DateTimeFormat.FirstDayOfWeek

    While (targetDay.DayOfWeek <> fDayOfWeek)
        targetDay = targetDay.AddDays(-1)
    End While
    Return targetDay
End Function

2

এখানে এমন একটি পদ্ধতি রয়েছে যা গুগল অ্যানালিটিক্সের সাথে সপ্তাহের সংখ্যার সাথে সামঞ্জস্যপূর্ণ এবং একই সংখ্যক স্কিমটি আমরা অভ্যন্তরীণভাবে ইন্টেলে ব্যবহার করেছি, এবং যা আমি নিশ্চিত যে অন্যান্য প্রচুর প্রসঙ্গেও এটি ব্যবহৃত হয়।

// Google Analytics does not follow ISO standards for date.
// It numbers week 1 starting on Jan. 1, regardless what day of week it starts on.
// It treats Sunday as the first day of the week.
// The first and last weeks of a year are usually not complete weeks.
public static DateTime GetStartDateTimeFromWeekNumberInYear(int year, uint weekOfYear)
{
  if (weekOfYear == 0 || weekOfYear > 54) throw new ArgumentException("Week number must be between 1 and 54! (Yes, 54... Year 2000 had Jan. 1 on a Saturday plus 53 Sundays.)");

  // January 1 -- first week.
  DateTime firstDayInWeek = new DateTime(year, 1, 1);
  if (weekOfYear == 1) return firstDayInWeek;

  // Get second week, starting on the following Sunday.      
  do
  {
    firstDayInWeek = firstDayInWeek.AddDays(1);
  } while (firstDayInWeek.DayOfWeek != DayOfWeek.Sunday);

  if (weekOfYear == 2) return firstDayInWeek;

  // Now get the Sunday of whichever week we're looking for.
  return firstDayInWeek.AddDays((weekOfYear - 2)*7);
}

2

আমি উপরের কয়েকটি কোড চেষ্টা করেছি এবং কিছুতে ছোট ছোট ভুল রয়েছে, যখন আপনি সপ্তাহের বিভিন্ন প্রারম্ভিক দিনগুলি সহ বিভিন্ন বছর চেষ্টা করেন আপনি সেগুলি দেখতে পাবেন, আমি জন স্কিটির কোড নিয়েছি, এটি ঠিক করেছি এবং এটি কার্যকর, খুব সাধারণ কোড।

Public Function YearWeekDayToDateTime(ByVal year As Integer, ByVal weekDay As Integer, ByVal week As Integer) As DateTime
   ' weekDay, day you want
    Dim startOfYear As New DateTime(year, 1, 1)
    Dim startOfYearFixDay As Integer

    If startOfYear.DayOfWeek <> DayOfWeek.Sunday Then
        startOfYearFixDay = startOfYear.DayOfWeek
    Else
        startOfYearFixDay = 7
    End If

    Return startOfYear.AddDays((7 * (week)) - startOfYearFixDay + weekDay)
End Function

1

মাইকেল সোভেনসন কোডটি হালকাভাবে পরিবর্তিত হয়েছে। আমি প্রথম সোমবার এবং যথাযথ পরিবর্তন সাপ্তাহের সপ্তাহটি পেয়েছি।

 DateTime GetFirstWeekDay(int year, int weekNum)
    {
        Calendar calendar = CultureInfo.CurrentCulture.Calendar;

        DateTime jan1 = new DateTime(year, 1, 1);

        int daysOffset = DayOfWeek.Monday - jan1.DayOfWeek;
        DateTime firstMonday = jan1.AddDays(daysOffset);
        int firstMondayWeekNum = calendar.GetWeekOfYear(firstMonday, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

        DateTime firstWeekDay = firstMonday.AddDays((weekNum-firstMondayWeekNum) * 7);

        return firstWeekDay;
    }

0

সপ্তাহ 1 সোমবার থেকে শুরু হওয়া এবং বছরের প্রথম বৃহস্পতিবার অন্তর্ভুক্ত সপ্তাহ হিসাবে সংজ্ঞায়িত হয়।


1
এটি একটি সংজ্ঞা, অন্যরা আছে।
হেন্ক হলটারম্যান

1
আইএসও স্ট্যান্ডার্ড বছরের প্রথম বৃহস্পতিবারকে সপ্তাহ হিসাবে সপ্তাহ 1 হিসাবে সংজ্ঞায়িত করে।
রিকার্ডএন


0

ওমরাইড দিয়ে থমাসের সমাধানে আমি কিছুটা উন্নতি করেছি:

   public static DateTime FirstDateOfWeek(int year, int weekOfYear)
    {
      return Timer.FirstDateOfWeekOfMonth(year, 1, weekOfYear);
    }

    public static DateTime FirstDateOfWeekOfMonth(int year, int month, 
    int weekOfYear)
    {
      DateTime dtFirstDayOfMonth = new DateTime(year, month, 1);

       //I also commented out this part:
      /*
      if (firstWeek <= 1)
      {
        weekOfYear -= 1;
      }
      */

অন্যথায় তারিখটি এক সপ্তাহ আগে করা হয়েছিল ..

থমাস ধন্যবাদ, দুর্দান্ত সাহায্য।


0

আমি সমাধানগুলির মধ্যে একটি ব্যবহার করেছি তবে এটি আমাকে ভুল ফলাফল দিয়েছে, কারণ এটি রবিবারকে সপ্তাহের প্রথম দিন হিসাবে গণ্য করে।

আমি বদলে গেছি:

var firstDay = new DateTime(DateTime.Now.Year, 1, 1).AddDays((weekNumber - 1) * 7);
var lastDay = firstDay.AddDays(6);

প্রতি:

var lastDay = new DateTime(DateTime.Now.Year, 1, 1).AddDays((weekNumber) * 7);
var firstDay = lastDay.AddDays(-6);

এবং এখন এটি কবজ হিসাবে কাজ করছে।


1
কিন্তু এটি কি ওপি-র প্রশ্নের উত্তর দেয়? এটি 1/1 প্লাস নির্দিষ্ট সংখ্যক দিন। সপ্তাহের ধারণার কোনও প্রথম দিন নেই।
গার্ট আর্নল্ড

0

প্রস্তাবিত সমাধানটি সম্পূর্ণ নয় - এটি কেবল ক্যালেন্ডারউইকরুলের জন্য কাজ করে irst প্রথমত ফুলওয়াক। অন্যান্য ধরণের সপ্তাহের নিয়মগুলি কার্যকর হয় না। এটি এই পরীক্ষার কেসটি ব্যবহার করে দেখা যায়:

foreach (CalendarWeekRule rule in Enum.GetValues(typeof(CalendarWeekRule)))
{
    for (int year = 1900; year < 2000; year++)
    {
        DateTime date = FirstDateOfWeek(year, 1, rule);
        Assert(CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date, rule, DayOfWeek.Monday) == 1);
        Assert(CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date.AddDays(-1), rule, DayOfWeek.Monday) != 1);
    }
}

0

আমি প্রস্তাবিত সমাধানটির একটি পরিমার্জনিত সংস্করণ তৈরি করেছি যা একটি সহজ এবং প্রথম ডেঅফওয়েককে প্যারাম্যাট্রিস দেয়:

public static DateTime GetFirstDayOfWeek(int year, int week, DayOfWeek firstDayOfWeek)
{
    return GetWeek1Day1(year, firstDayOfWeek).AddDays(7 * (week - 1));
}

public static DateTime GetWeek1Day1(int year, DayOfWeek firstDayOfWeek)
{
    DateTime date = new DateTime(year, 1, 1);

    // Move towards firstDayOfWeek
    date = date.AddDays(firstDayOfWeek - date.DayOfWeek);

    // Either 1 or 52 or 53
    int weekOfYear = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFullWeek, firstDayOfWeek);

    // Move forwards 1 week if week is 52 or 53
    date = date.AddDays(7 * System.Math.Sign(weekOfYear - 1));

    return date;
}

0

এটি যখন আমার প্রদত্ত বছর, সপ্তাহের নম্বর এবং সপ্তাহের দিন গণনা করতে চাই তখন আমার সমাধান এটি is

int Year = 2014;
int Week = 48;
int DayOfWeek = 4;

DateTime FecIni = new DateTime(Year, 1, 1);
FecIni = FecIni.AddDays(7 * (Week - 1));
if ((int)FecIni.DayOfWeek > DayOfWeek)
{
    while ((int)FecIni.DayOfWeek != DayOfWeek) FecIni = FecIni.AddDays(-1);
}
else
{
    while ((int)FecIni.DayOfWeek != DayOfWeek) FecIni = FecIni.AddDays(1);
}

0

আমি মাইকেল সোভেনসন কোড সরবরাহ করেছি যা ইউরোপের অনেক দেশের জন্য সঠিক is

public static DateTime FirstDateOfWeekIso8601(int year, int week)
{
        var firstThursdayOfYear = new DateTime(year, 1, 1);
        while (firstThursdayOfYear.DayOfWeek != DayOfWeek.Thursday)
        {
            firstThursdayOfYear = firstThursdayOfYear.AddDays(1);
        }

        var startDateOfWeekOne = firstThursdayOfYear.AddDays(-(DayOfWeek.Thursday - DayOfWeek.Monday));

        return startDateOfWeekOne.AddDays(7 * (week - 1));        
}

0

আমি নিম্নলিখিত কোডটি লিখেছি এবং পরীক্ষা করেছি এবং আমার জন্য পুরোপুরি সূক্ষ্মভাবে কাজ করছি। কেউ যদি এ নিয়ে সমস্যার মুখোমুখি হন দয়া করে আমাকে জানান, সর্বোত্তম সম্ভাব্য উত্তর পাওয়ার জন্য আমি পাশাপাশি একটি প্রশ্ন পোস্ট করেছি। কেউ এটি দরকারী মনে হতে পারে।

public static DateTime GetFirstDateOfWeekByWeekNumber(int year, int weekNumber)
        {
            var date = new DateTime(year, 01, 01);
            var firstDayOfYear = date.DayOfWeek;
            var result = date.AddDays(weekNumber * 7);

            if (firstDayOfYear == DayOfWeek.Monday)
                return result.Date;
            if (firstDayOfYear == DayOfWeek.Tuesday)
                return result.AddDays(-1).Date;
            if (firstDayOfYear == DayOfWeek.Wednesday)
                return result.AddDays(-2).Date;
            if (firstDayOfYear == DayOfWeek.Thursday)
                return result.AddDays(-3).Date;
            if (firstDayOfYear == DayOfWeek.Friday)
                return result.AddDays(-4).Date;
            if (firstDayOfYear == DayOfWeek.Saturday)
                return result.AddDays(-5).Date;
            return result.AddDays(-6).Date;
        }

এটি ভুল - কমপক্ষে অনেক ইউরোপীয় দেশগুলির জন্য। GetFirstDateOfWeekByWeekNumber(2020, 29)2020 এর 29 সপ্তাহের জন্য এই ফিরে আসে 07/20/2020। তবে 29 তম সপ্তাহের প্রথম দিনটি ছিল07/13/2020
ম্যাথিয়াস বার্গার

0

বর্তমানে, কোনও সি # শ্রেণি নেই যা আইএসও 8601 উইকের সংখ্যাগুলি সঠিকভাবে পরিচালনা করে। যদিও আপনি কোনও সংস্কৃতি ইনস্ট্যান্ট করতে পারেন, নিকটস্থ জিনিসটি সন্ধান করুন এবং এটি সংশোধন করুন, আমি মনে করি সম্পূর্ণ গণনা নিজেই করা ভাল:

    /// <summary>
    /// Converts a date to a week number.
    /// ISO 8601 week 1 is the week that contains the first Thursday that year.
    /// </summary>
    public static int ToIso8601Weeknumber(this DateTime date)
    {
        var thursday = date.AddDays(3 - date.DayOfWeek.DayOffset());
        return (thursday.DayOfYear - 1) / 7 + 1;
    }

    /// <summary>
    /// Converts a week number to a date.
    /// Note: Week 1 of a year may start in the previous year.
    /// ISO 8601 week 1 is the week that contains the first Thursday that year, so
    /// if December 28 is a Monday, December 31 is a Thursday,
    /// and week 1 starts January 4.
    /// If December 28 is a later day in the week, week 1 starts earlier.
    /// If December 28 is a Sunday, it is in the same week as Thursday January 1.
    /// </summary>
    public static DateTime FromIso8601Weeknumber(int weekNumber, int? year = null, DayOfWeek day = DayOfWeek.Monday)
    {
        var dec28 = new DateTime((year ?? DateTime.Today.Year) - 1, 12, 28);
        var monday = dec28.AddDays(7 * weekNumber - dec28.DayOfWeek.DayOffset());
        return monday.AddDays(day.DayOffset());
    }

    /// <summary>
    /// Iso8601 weeks start on Monday. This returns 0 for Monday.
    /// </summary>
    private static int DayOffset(this DayOfWeek weekDay)
    {
        return ((int)weekDay + 6) % 7;
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.