Я использую этот фрагмент:
private string GetCurrentWeek()
{
// Return a string to be used in the TextBox control on the Main Form
DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
int Year = DateTime.Now.Year;
int Month = DateTime.Now.Month;
int Day = DateTime.Now.Day;
DateTime Date1 = new DateTime(Year, Month, Day);
Calendar cal = dfi.Calendar;
return cal.GetWeekOfYear(Date1, dfi.CalendarWeekRule, dfi.FirstDayOfWeek).ToString();
}
Чтобы получить текущую неделю года. Что возвращается, как ожидалось. Хоть. Это начинается с января. Что делает то, что говорит код. Хотя, я идеально ищу его, чтобы начать с апреля. Таким образом, первая неделя начнется 6 апреля, а 5-я неделя - 5 апреля (точно так же, как и UK Tax Year). Я искал интернет и google (возможно, используя неправильные ключевые слова), но я не могу узнать, как выполнить эту задачу, используя С#
Я предполагаю, что вы хотите, чтобы неделя 1 начиналась 6 апреля всегда и длилась 7 дней, вместо того, чтобы иметь какое-то правило вроде "Недели всегда начинаются по понедельникам". В основном это только вопрос:
Например:
DateTime today = DateTime.Today;
int taxYear = today.Month > 4 || today.Month == 4 && today.Day >= 6
? today.Year : today.Year - 1;
DateTime taxYearStart = new DateTime(taxYear, 4, 6);
TimeSpan elapsedTaxYear = today - taxYearStart;
int days = elapsedTaxYear.Days;
int taxYearWeek = (days / 7) + 1;
Конечно, вы также можете использовать Noda Time:
// Usually inject this, using SystemClock.Instance for production
IClock clock = ...;
// For the UK, use DateTimeZoneProviders.Tzdb["Europe/London"];
DateTimeZone zone = ...;
// This will be simpler in Noda Time 2.0 with ZonedClock
LocalDate today = clock.Now.InZone(zone).LocalDateTime.Date;
int taxYear = today.Month > 4 || today.Month == 4 && today.Day >= 6
? today.Year : today.Year - 1;
LocalDate taxYearStart = new LocalDate(taxYear, 4, 6);
int days = Period.Between(taxYearStart, today, PeriodUnits.Days).Days;
int taxYearWeek = (days / 7) + 1;
DateTime
может решить эту проблему