Esempio n. 1
0
        public static int getLunarMonth11(int yy, double timeZone)
        {
            double off     = (VietCalendar.jdFromDate(31, 12, yy) - 2415021.0769986948);
            int    k       = VietCalendar.INT((off / 29.530588853));
            int    nm      = VietCalendar.getNewMoonDay(k, timeZone);
            int    sunLong = VietCalendar.INT((VietCalendar.getSunLongitude(nm, timeZone) / 30));

            if ((sunLong >= 9))
            {
                nm = VietCalendar.getNewMoonDay((k - 1), timeZone);
            }

            return(nm);
        }
Esempio n. 2
0
        // Duong lich sang Am lich
        public static int[] convertSolar2Lunar(int dd, int mm, int yy, double timeZone)
        {
            int lunarLeap;
            int lunarDay;
            int lunarMonth;
            int lunarYear;
            int dayNumber = VietCalendar.jdFromDate(dd, mm, yy);
            int k         = VietCalendar.INT(((dayNumber - 2415021.0769986948)
                                              / 29.530588853));
            int monthStart = VietCalendar.getNewMoonDay((k + 1), timeZone);

            if ((monthStart > dayNumber))
            {
                monthStart = VietCalendar.getNewMoonDay(k, timeZone);
            }

            int a11 = VietCalendar.getLunarMonth11(yy, timeZone);
            int b11 = a11;

            if ((a11 >= monthStart))
            {
                lunarYear = yy;
                a11       = VietCalendar.getLunarMonth11((yy - 1), timeZone);
            }
            else
            {
                lunarYear = (yy + 1);
                b11       = VietCalendar.getLunarMonth11((yy + 1), timeZone);
            }

            lunarDay = ((dayNumber - monthStart)
                        + 1);
            int diff = VietCalendar.INT(((monthStart - a11)
                                         / 29));

            lunarLeap  = 0;
            lunarMonth = (diff + 11);
            if (((b11 - a11)
                 > 365))
            {
                int leapMonthDiff = VietCalendar.getLeapMonthOffset(a11, timeZone);
                if ((diff >= leapMonthDiff))
                {
                    lunarMonth = (diff + 10);
                    if ((diff == leapMonthDiff))
                    {
                        lunarLeap = 1;
                    }
                }
            }

            if ((lunarMonth > 12))
            {
                lunarMonth = (lunarMonth - 12);
            }

            if (((lunarMonth >= 11) &&
                 (diff < 4)))
            {
                lunarYear--;
            }

            return(new int[] {
                lunarDay,
                lunarMonth,
                lunarYear,
                lunarLeap
            });
        }