Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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(),
            });
Пример #4
0
 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)),
     });
Пример #5
0
 public NearestPart(SettleUnit unit)
 {
     Unit = unit;
 }
Пример #6
0
 public SettleRuleBuilder EndOf(SettleUnit unit)
 {
     Rule.Parts.Add(new EndOfPart(unit));
     return(this);
 }
Пример #7
0
 public SettleRuleBuilder Nearest(SettleUnit unit)
 {
     Rule.Parts.Add(new NearestPart(unit));
     return(this);
 }
Пример #8
0
 public static ZonedDateTime StartOf(this ZonedDateTime origin, SettleUnit unit)
 {
     return(origin.Zone.AtLeniently(origin.LocalDateTime.StartOf(unit)));
 }
Пример #9
0
        public static string ToCamelCaseString(this SettleUnit unit)
        {
            var @string = unit.ToString();

            return(char.ToLowerInvariant(@string[0]) + @string[1..]);
Пример #10
0
 public StartOfPart(SettleUnit unit)
 {
     Unit = unit;
 }
Пример #11
0
 public EndOfPart(SettleUnit unit)
 {
     Unit = unit;
 }