예제 #1
0
 /// <summary>
 /// Optimized conversion from an Instant to an OffsetDateTime in the specified calendar.
 /// This is equivalent to <c>new OffsetDateTime(new LocalDateTime(instant.Plus(offset), calendar), offset)</c>
 /// but with less overhead.
 /// </summary>
 internal OffsetDateTime(Instant instant, Offset offset, CalendarSystem calendar)
 {
     unchecked
     {
         int  days      = instant.DaysSinceEpoch;
         long nanoOfDay = instant.NanosecondOfDay + offset.Nanoseconds;
         if (nanoOfDay >= NanosecondsPerDay)
         {
             days++;
             nanoOfDay -= NanosecondsPerDay;
         }
         else if (nanoOfDay < 0)
         {
             days--;
             nanoOfDay += NanosecondsPerDay;
         }
         yearMonthDayCalendar = calendar.GetYearMonthDayCalendarFromDaysSinceEpoch(days);
         nanosecondsAndOffset = CombineNanoOfDayAndOffset(nanoOfDay, offset);
     }
 }
예제 #2
0
 /// <summary>
 /// Constructs an instance from the number of days since the unix epoch, and a calendar
 /// system. The calendar system is assumed to be non-null, but the days since the epoch are
 /// validated.
 /// </summary>
 internal LocalDate(int daysSinceEpoch, [Trusted][NotNull] CalendarSystem calendar)
 {
     Preconditions.DebugCheckNotNull(calendar, nameof(calendar));
     this.yearMonthDayCalendar = calendar.GetYearMonthDayCalendarFromDaysSinceEpoch(daysSinceEpoch);
 }