Ejemplo n.º 1
0
        public NsDateTime(int year, int month, int day, int hour, int minute, int second, double millisecond)
        {
            if (year < 1 || year > 9999)
            {
                throw new ArgumentOutOfRangeException(nameof(year), year,
                                                      "Enter a year between (1-9999).");
            }

            var daysOfMonth     = NanakshahiDateTime.DaysInMonth(year, month);
            var nanakshahiMonth = NsHelper.MonthToNsMonth(month - 1);

            if (day < 1 || day > daysOfMonth)
            {
                throw new ArgumentOutOfRangeException(nameof(day), day,
                                                      $"Enter a valid day. The month {nanakshahiMonth.TransliterationName} in year {year} has (1-{daysOfMonth}) days.");
            }

            if (hour < 0 || hour > 23)
            {
                throw new ArgumentOutOfRangeException(nameof(hour), hour,
                                                      "Enter an hour between (0-23).");
            }

            if (minute < 0 || minute > 59)
            {
                throw new ArgumentOutOfRangeException(nameof(minute), minute,
                                                      "Enter a minute between (0-59).");
            }

            if (second < 0 || second > 59)
            {
                throw new ArgumentOutOfRangeException(nameof(second), second,
                                                      "Enter a second between (0-59).");
            }

            if (millisecond < 0 || millisecond > 999)
            {
                throw new ArgumentOutOfRangeException(nameof(millisecond), millisecond,
                                                      "Enter a second between (0-999).");
            }

            Year        = year;
            Month       = month;
            Day         = day;
            Hour        = hour;
            Minute      = minute;
            Second      = second;
            Millisecond = millisecond;
        }
Ejemplo n.º 2
0
        public static NanakshahiDateTime ToNanakshahiDateTime(this DateTime gregorianDate)
        {
            if (gregorianDate.Year < 1469 && gregorianDate.Month < 3 && gregorianDate.Day < 14)
            {
                throw new ArgumentOutOfRangeException(nameof(gregorianDate), gregorianDate,
                                                      "Enter a date of 1469/3/14 or larger.");
            }

            var holaMohalla = new DateTime(gregorianDate.Year, 3, 14);

            var nsYear = gregorianDate >= holaMohalla
                ? gregorianDate.Year - 1468
                : gregorianDate.Year - 1469;

            var nsMonth     = NsHelper.MonthToNsMonth((gregorianDate.Month + 8) % 12);
            var nsNextMonth = NsHelper.MonthToNsMonth(nsMonth.MonthNumber % 12);

            int nsDay;

            if (gregorianDate.Day >= nsNextMonth.Offset)
            {
                nsMonth = nsNextMonth;
                nsDay   = gregorianDate.Day - nsNextMonth.Offset + 1;
            }
            else
            {
                var firstOfNsMonth = new DateTime(
                    gregorianDate.Year,
                    gregorianDate.Month - 1,
                    nsMonth.Offset
                    );

                nsDay = (int)(gregorianDate.ToUniversalTime() - firstOfNsMonth.ToUniversalTime()).TotalDays + 1;
            }

            return(new NanakshahiDateTime(nsYear, nsMonth.MonthNumber, nsDay, gregorianDate.Hour, gregorianDate.Minute,
                                          gregorianDate.Second, gregorianDate.Millisecond));
        }