コード例 #1
0
ファイル: TickInterval.cs プロジェクト: yakimovim/timeline
        private static string YearsTickName(ExactDateInfo date)
        {
            var builder = new StringBuilder();

            builder.Append(date.Year);
            builder.Append(" " + date.Era.ToEraString());
            return(builder.ToString());
        }
コード例 #2
0
 public TimeRange(ExactDateInfo start, ExactDateInfo end)
 {
     if (start > end)
     {
         throw new ArgumentException("Start should not be greater then end.", nameof(end));
     }
     Start = start;
     End   = end;
 }
コード例 #3
0
ファイル: TickInterval.cs プロジェクト: yakimovim/timeline
        private static string MonthsTickName(ExactDateInfo date)
        {
            var builder = new StringBuilder();

            builder.Append(date.Year);
            builder.AppendLine(" " + date.Era.ToEraString());
            builder.Append(CultureInfo.InvariantCulture.DateTimeFormat.GetMonthName(date.Month));
            return(builder.ToString());
        }
コード例 #4
0
ファイル: Tick.cs プロジェクト: yakimovim/timeline
 public Tick(ExactDateInfo date, string name)
 {
     if (string.IsNullOrWhiteSpace(name))
     {
         throw new ArgumentNullException(nameof(name));
     }
     Date  = date;
     _name = name;
 }
コード例 #5
0
ファイル: TickInterval.cs プロジェクト: yakimovim/timeline
        private static Func <ExactDateInfo, ExactDateInfo> NextTickDateForYears(
            Duration tickDuration)
        {
            var oneYear  = Duration.Zero.AddYears(1);
            var eraStart = ExactDateInfo.AnnoDomini(1, 1, 1, 0);

            return(prevTickDate =>
            {
                if (tickDuration > oneYear &&
                    prevTickDate == eraStart)
                {
                    return prevTickDate + tickDuration - oneYear;
                }

                return prevTickDate + tickDuration;
            });
        }
コード例 #6
0
ファイル: TickInterval.cs プロジェクト: yakimovim/timeline
        private static ExactDateInfo SixMonthsFirstTickDate(ExactDateInfo start)
        {
            var date = new ExactDateInfo(
                start.Era,
                start.Year,
                1,
                1,
                0
                );

            if (date < start)
            {
                date += Duration.Zero.AddMonths(6);
            }

            return(date);
        }
コード例 #7
0
ファイル: TickInterval.cs プロジェクト: yakimovim/timeline
        private static ExactDateInfo DaysFirstTickDate(ExactDateInfo start)
        {
            var date = new ExactDateInfo(
                start.Era,
                start.Year,
                start.Month,
                start.Day,
                0
                );

            if (date < start)
            {
                date += Duration.Zero.AddDays(1);
            }

            return(date);
        }
コード例 #8
0
ファイル: TickInterval.cs プロジェクト: yakimovim/timeline
        public IReadOnlyList <Tick> GetTicksBetween(ExactDateInfo start, ExactDateInfo end)
        {
            var ticks = new List <Tick>();

            for (var tickDate = _firstTickDateProvider(start);
                 tickDate <= end;
                 tickDate = _nextTickDateProvider(tickDate))
            {
                ticks.Add(
                    new Tick(
                        tickDate,
                        _nameProvider(tickDate)
                        )
                    );
            }

            return(ticks);
        }
コード例 #9
0
ファイル: TickInterval.cs プロジェクト: yakimovim/timeline
        private static Func <ExactDateInfo, ExactDateInfo> YearsFirstTickDate(long yearsPeriod)
        {
            return(start =>
            {
                var periodsInYear = start.Year / yearsPeriod;

                var date = new ExactDateInfo(
                    start.Era,
                    Math.Max(1, periodsInYear) * yearsPeriod,
                    1,
                    1,
                    0
                    );

                if (date < start)
                {
                    date += Duration.Zero.AddYears(yearsPeriod);
                }

                return date;
            });
        }
コード例 #10
0
 /// <summary>
 /// Changes end of the time range.
 /// </summary>
 /// <param name="end">New end date.</param>
 public TimeRange SetEnd(ExactDateInfo end)
 {
     return(new TimeRange(Start, end));
 }
コード例 #11
0
 /// <summary>
 /// Changes start of the time range.
 /// </summary>
 /// <param name="start">New start date.</param>
 public TimeRange SetStart(ExactDateInfo start)
 {
     return(new TimeRange(start, End));
 }
コード例 #12
0
ファイル: TickInterval.cs プロジェクト: yakimovim/timeline
 private static ExactDateInfo OneHourFirstTickDate(ExactDateInfo start)
 {
     return(start);
 }
コード例 #13
0
ファイル: Duration.cs プロジェクト: yakimovim/timeline
        /// <summary>
        /// Gets date corresponding to this duration
        /// after Christ birth.
        /// </summary>
        public ExactDateInfo GetDateAfterChristBirth()
        {
            var duration = _hours;

            var era = duration >= 0
                ? Era.AnnoDomini
                : Era.BeforeChrist;

            if (era == Era.AnnoDomini)
            {
                var years = duration / HoursInYear;

                duration -= HoursInYear * years;

                years += 1;

                var months = Convert.ToInt32(duration / HoursInMonth);

                duration -= HoursInMonth * months;

                months += 1;

                var days = Convert.ToInt32(duration / HoursInDay);

                duration -= HoursInDay * days;

                days += 1;

                FixDate(ref years, ref months, ref days);

                var hours = Convert.ToInt32(duration);

                return(ExactDateInfo.AnnoDomini(years, months, days, hours));
            }
            else
            {
                var years = duration / HoursInYear;

                if (duration != years * HoursInYear)
                {
                    years -= 1;
                }

                duration -= HoursInYear * years;

                years = -years;

                var months = Convert.ToInt32(duration / HoursInMonth);

                duration -= HoursInMonth * months;

                months += 1;

                var days = Convert.ToInt32(duration / HoursInDay);

                duration -= HoursInDay * days;

                days += 1;

                var hours = Convert.ToInt32(duration);

                return(ExactDateInfo.BeforeChrist(years, months, days, hours));
            }
        }