الأحد الأخير من السنة في C#
-
07-07-2019 - |
سؤال
كيف يمكنني الحصول على تاريخ الأحد الأخير من العام في C#؟؟هل ستكون فئة التقويم الميلادي مفيدة؟
المحلول
لا أعرف ما إذا كانت هناك طريقة لذلك ولكن الطريقة البسيطة هي التحقق من آخر 7 أيام من شهر ديسمبر، بدءًا من اليوم الحادي والثلاثين والعد التنازلي.
تحديث: في الواقع إذا تم ترقيم أيام الأسبوع مثل هذا:
0 Sun, 1 Mon, ... 6 Sat
ثم
lastSunday = 31 - DayOfWeek(31, 12, 2009) // pseudocode
نصائح أخرى
وليس اجمل حل ولكن ينبغي العمل:
int year = 2009;
DateTime lastSunday = new DateTime(year, 12, 31);
while (lastSunday.DayOfWeek != DayOfWeek.Sunday)
{
lastSunday = lastSunday.AddDays(-1);
}
واعتقد انه يمكن استخدام تمثيل صحيح للتعداد DayOfWeek
لذلك:
DateTime endOfYear = new DateTime(DateTime.Now.Year, 12, 31);
DateTime lastSunday = endOfYear.AddDays(-(int)endOfYear.DayOfWeek);
وأما تعداد DAYOFWEEK أ > يبدأ في 0 يوم الأحد، وهذا يجب أن تعمل:
int Year = 2009;
DateTime endOfYear = new DateTime(Year, 12, 31);
DateTime sunday = endOfYear.AddDays(-(int)endOfYear.DayOfWeek);
ويمكنك معرفة أي يوم من أيام الأسبوع 31 ديسمبر هو. ثم (إن لم يكن الاحد) حساب الظهر ...
for (int y=2009; y<=2018; y++)
{
DateTime dt = new DateTime(y, 12, 31); // last day of year
dt = dt.AddDays(-(int)dt.DayOfweek); // sun == 0, so then no change
Console.WriteLine(dt.ToString("dddd dd-MM-yyyy"));
}
وعذرا لكنني لم يكن لديك C # الإصدار هو إذا رأيت هنا للحصول على نسخة VB. وأظن عليك أن تكون قادرا على تحويله.
وهذا يتوقف ... هل تريد اليوم الأخير من السنة التي هو الأحد أو الأحد من الأسبوع الأخير من السنة؟ اعتمادا على كيفية أسابيع تتحدد في بلدك، في الأسبوع الأخير من السنة قد ترتفع إلى ستة أيام في العام المقبل.
إذا كنت تريد أولا، يمكنك أن تبدأ فقط في 31 ديسمبر والعودة حتى تجد الاحد.
إذا كنت ترغب في الثانية، سيكون لديك لاستخدام أسلوب System.Globalizartion.Calendar.GetWeekOfYear
لمعرفة أين يبدأ الأسبوع الأول من العام المقبل، واتخاذ يوم قبل ذلك.