public void StartOfMonth(SettleUnit month, int expectedYear, int expectedMonth) { var origin = new LocalDateTime(2014, 11, 12, 21, 0).InZoneLeniently(Timezone); var result = origin.StartOf(month); Assert.Equal(new LocalDateTime(expectedYear, expectedMonth, 1, 0, 0).InZoneLeniently(Timezone), result); }
public void StartOfWeekday(SettleUnit weekday, int expectedDay) { var origin = new LocalDateTime(2014, 11, 12, 21, 0).InZoneLeniently(Timezone); // Wednesday var result = origin.StartOf(weekday); Assert.Equal(new LocalDateTime(2014, 11, expectedDay, 0, 0).InZoneLeniently(Timezone), result); }
public static LocalDateTime EndOf(this LocalDateTime origin, SettleUnit unit) { var startOf = origin.StartOf(unit); return(unit switch { SettleUnit.Second => startOf.PlusSeconds(1), SettleUnit.Minute => startOf.PlusMinutes(1), SettleUnit.Hour => startOf.PlusHours(1), SettleUnit.Day => startOf.PlusDays(1), SettleUnit.Month => startOf.PlusMonths(1), SettleUnit.Quarter => startOf.PlusMonths(3), SettleUnit.Year => startOf.PlusYears(1), SettleUnit.Monday or SettleUnit.Tuesday or SettleUnit.Wednesday or SettleUnit.Thursday or SettleUnit.Friday or SettleUnit.Saturday or SettleUnit.Sunday => startOf.PlusDays(7), SettleUnit.January or SettleUnit.February or SettleUnit.March or SettleUnit.April or SettleUnit.May or SettleUnit.June or SettleUnit.July or SettleUnit.August or SettleUnit.September or SettleUnit.October or SettleUnit.November or SettleUnit.December => startOf.PlusYears(1), SettleUnit.Season => startOf.PlusMonths(3), SettleUnit.Spring or SettleUnit.Summer or SettleUnit.Autumn or SettleUnit.Winter => startOf.PlusYears(1), _ => throw new InvalidOperationException(), });
public static LocalDateTime StartOf(this LocalDateTime origin, SettleUnit unit) { return(unit switch { SettleUnit.Second => StartOfTicks(TimeSpan.TicksPerSecond), SettleUnit.Minute => StartOfTicks(TimeSpan.TicksPerMinute), SettleUnit.Hour => StartOfTicks(TimeSpan.TicksPerHour), SettleUnit.Day => StartOfTicks(TimeSpan.TicksPerDay), SettleUnit.Month => StartOfMonth(origin.Month), SettleUnit.Quarter => StartOfMonth(((origin.Month - 1) / 3) * 3 + 1), SettleUnit.Year => StartOfMonth(1), SettleUnit.Monday => origin.StartOf(IsoDayOfWeek.Monday), SettleUnit.Tuesday => origin.StartOf(IsoDayOfWeek.Tuesday), SettleUnit.Wednesday => origin.StartOf(IsoDayOfWeek.Wednesday), SettleUnit.Thursday => origin.StartOf(IsoDayOfWeek.Thursday), SettleUnit.Friday => origin.StartOf(IsoDayOfWeek.Friday), SettleUnit.Saturday => origin.StartOf(IsoDayOfWeek.Saturday), SettleUnit.Sunday => origin.StartOf(IsoDayOfWeek.Sunday), SettleUnit.January => StartOfMonth(1), SettleUnit.February => StartOfMonth(2), SettleUnit.March => StartOfMonth(3), SettleUnit.April => StartOfMonth(4), SettleUnit.May => StartOfMonth(5), SettleUnit.June => StartOfMonth(6), SettleUnit.July => StartOfMonth(7), SettleUnit.August => StartOfMonth(8), SettleUnit.September => StartOfMonth(9), SettleUnit.October => StartOfMonth(10), SettleUnit.November => StartOfMonth(11), SettleUnit.December => StartOfMonth(12), SettleUnit.Season => StartOfSeason(), SettleUnit.Spring => StartOfMonth(3), SettleUnit.Summer => StartOfMonth(6), SettleUnit.Autumn => StartOfMonth(9), SettleUnit.Winter => StartOfMonth(12), _ => throw new ArgumentException("Invalid start of unit", nameof(unit)), });
public NearestPart(SettleUnit unit) { Unit = unit; }
public SettleRuleBuilder EndOf(SettleUnit unit) { Rule.Parts.Add(new EndOfPart(unit)); return(this); }
public SettleRuleBuilder Nearest(SettleUnit unit) { Rule.Parts.Add(new NearestPart(unit)); return(this); }
public static ZonedDateTime StartOf(this ZonedDateTime origin, SettleUnit unit) { return(origin.Zone.AtLeniently(origin.LocalDateTime.StartOf(unit))); }
public static string ToCamelCaseString(this SettleUnit unit) { var @string = unit.ToString(); return(char.ToLowerInvariant(@string[0]) + @string[1..]);
public StartOfPart(SettleUnit unit) { Unit = unit; }
public EndOfPart(SettleUnit unit) { Unit = unit; }