private static string YearsTickName(ExactDateInfo date) { var builder = new StringBuilder(); builder.Append(date.Year); builder.Append(" " + date.Era.ToEraString()); return(builder.ToString()); }
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; }
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()); }
public Tick(ExactDateInfo date, string name) { if (string.IsNullOrWhiteSpace(name)) { throw new ArgumentNullException(nameof(name)); } Date = date; _name = name; }
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; }); }
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); }
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); }
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); }
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; }); }
/// <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)); }
/// <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)); }
private static ExactDateInfo OneHourFirstTickDate(ExactDateInfo start) { return(start); }
/// <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)); } }