public static DateTime LunarToSolar(LunarDate ld, int timeZone)
        {
            long k, a11, b11, off, leapOff, leapMonth, monthStart;

            if (ld.Month < 11)
            {
                a11 = LunarYearTools.getLunarMonth11(ld.Year - 1, timeZone);
                b11 = LunarYearTools.getLunarMonth11(ld.Year, timeZone);
            }
            else
            {
                a11 = LunarYearTools.getLunarMonth11(ld.Year, timeZone);
                b11 = LunarYearTools.getLunarMonth11(ld.Year + 1, timeZone);
            }
            k   = LunarYearTools.INT(0.5 + (a11 - 2415021.076998695) / 29.530588853);
            off = ld.Month - 11;
            if (off < 0)
            {
                off += 12;
            }
            if (b11 - a11 > 365)
            {
                leapOff   = LunarYearTools.getLeapMonthOffset(a11, timeZone);
                leapMonth = leapOff - 2;
                if (leapMonth < 0)
                {
                    leapMonth += 12;
                }
                if (ld.IsLeapYear && ld.Month != leapMonth)
                {
                    return(DateTime.MinValue);
                }
                else if (ld.IsLeapYear || off >= leapOff)
                {
                    off += 1;
                }
            }
            monthStart = LunarYearTools.getNewMoonDay(k + off, timeZone);
            return(LunarYearTools.jdToDate(monthStart + ld.Day - 1));
        }
 public static DateTime LunarToSolar(LunarDate ld, int timeZone)
 {
     long k, a11, b11, off, leapOff, leapMonth, monthStart;
     if (ld.Month < 11)
     {
         a11 = LunarYearTools.getLunarMonth11(ld.Year - 1, timeZone);
         b11 = LunarYearTools.getLunarMonth11(ld.Year, timeZone);
     }
     else
     {
         a11 = LunarYearTools.getLunarMonth11(ld.Year, timeZone);
         b11 = LunarYearTools.getLunarMonth11(ld.Year + 1, timeZone);
     }
     k = LunarYearTools.INT(0.5 + (a11 - 2415021.076998695) / 29.530588853);
     off = ld.Month - 11;
     if (off < 0)
     {
         off += 12;
     }
     if (b11 - a11 > 365)
     {
         leapOff = LunarYearTools.getLeapMonthOffset(a11, timeZone);
         leapMonth = leapOff - 2;
         if (leapMonth < 0)
         {
             leapMonth += 12;
         }
         if (ld.IsLeapYear && ld.Month != leapMonth)
         {
             return DateTime.MinValue;
         }
         else if (ld.IsLeapYear || off >= leapOff)
         {
             off += 1;
         }
     }
     monthStart = LunarYearTools.getNewMoonDay(k + off, timeZone);
     return LunarYearTools.jdToDate(monthStart + ld.Day - 1);
 }
 /* Convert a lunar date to the corresponding solar date */
 public static DateTime LunarToSolar(LunarDate ld)
 {
     return(LunarToSolar(ld, 7));
 }
 /* Convert a lunar date to the corresponding solar date */
 public static DateTime LunarToSolar(LunarDate ld)
 {
     return LunarToSolar(ld, 7);
 }