在c#中获取下一个光明节日期

本文关键字:光明 日期 下一个 获取 | 更新日期: 2023-09-27 18:12:08

我想从今天的UTC日期找出下一个光明节的日期。我已经发现c#有HebrewCalendar类,并且我能够获得GetYear(), GetMonth()GetDayOfMonth()的当前犹太日期。但是我真的不知道如何使用这些信息来获得当前日期接下来将要发生的犹太日期。

光明节为犹太历3月25日。

在c#中获取下一个光明节日期

@DmitryBychenko的答案很好,虽然如果你不想循环,你也可以计算它:

var calendar = new HebrewCalendar();
var result = DateTime.UtcNow;
if(
        calendar.GetMonth(result) < 3
    || (calendar.GetMonth(result)==3 && calendar.GetDayOfMonth(result)<25)
  )
   result = new DateTime(calendar.GetYear(result), 3, 25, calendar);
else
   result = new DateTime(calendar.GetYear(result)+1, 3, 25, calendar);

如果你在HebrewCalendar上低于25/3,使用今年,否则使用下一年

结果也是公历2015年12月7日

如果(根据注释)由于某种原因你不想要那些讨厌的 if语句,你可以这样做:

var calendar = new HebrewCalendar();
var result = DateTime.UtcNow;
var addYear = (calendar.GetMonth(result) < 3 || (calendar.GetMonth(result)==3 && calendar.GetDayOfMonth(result)<25)) ? 0 : 1;
result = new DateTime(calendar.GetYear(result) + addYear, 3, 25, calendar);

我不认为这对可读性有帮助但是你看

根据Twitter上的建议,下面是Noda时间的解决方案:

// As of 2.0, it will be CalendarSystem.HebrewCivil
var calendar = CalendarSystem.GetHebrewCalendar(HebrewMonthNumbering.Civil);
var today = SystemClock.Instance.InZone(DateTimeZone.Utc, calendar).Date;
var thisHannukah = new LocalDate(today.Year, 3, 25, calendar);
return thisHannukah >= today ? thisHannukah : thisHannukah.PlusYears(1);

后两个语句的替代:

var year = today.Month < 3 || today.Month == 3 && today.Day <= 25
    ? today.Year : today.Year + 1;
return new LocalDate(year, 3, 25, calendar);

如果我们继续执行功能请求317,这可能会简单得多。例如:

// Putative API only! Doesn't work yet!
MonthDay hannukah = new MonthDay(3, 25, calendar);
var nextHannukah = hannukah.NextOrSame(today);

嗯,只是循环?从DateTime.Now开始逐个测试date ?

  HebrewCalendar calendar = new HebrewCalendar();
  DateTime result = DateTime.Now;
  for (DateTime date = DateTime.Now.Date; ; date = date.AddDays(1)) {
    if (calendar.GetDayOfMonth(date) == 25 && calendar.GetMonth(date) == 3) {
      result = date;
      break;
    }
  }

返回result == 7 Dec 2015 ?