Esempio n. 1
0
        public static void FromDayNumberTest()
        {
            DateOnly dateOnly = DateOnly.FromDayNumber(DateOnly.MinValue.DayNumber);

            Assert.Equal(1, dateOnly.Year);
            Assert.Equal(1, dateOnly.Month);
            Assert.Equal(1, dateOnly.Day);
            Assert.Equal(DateOnly.MinValue.DayNumber, dateOnly.DayNumber);

            dateOnly = DateOnly.FromDayNumber(DateOnly.MaxValue.DayNumber);
            Assert.Equal(9999, dateOnly.Year);
            Assert.Equal(12, dateOnly.Month);
            Assert.Equal(31, dateOnly.Day);
            Assert.Equal(DateOnly.MaxValue.DayNumber, dateOnly.DayNumber);

            DateTime dt        = DateTime.Today;
            int      dayNumber = (int)(dt.Ticks / TimeSpan.TicksPerDay);

            dateOnly = DateOnly.FromDayNumber(dayNumber);
            Assert.Equal(dt.Year, dateOnly.Year);
            Assert.Equal(dt.Month, dateOnly.Month);
            Assert.Equal(dt.Day, dateOnly.Day);
            Assert.Equal(dayNumber, dateOnly.DayNumber);

            Assert.Throws <ArgumentOutOfRangeException>(() => DateOnly.FromDayNumber(-1));
            Assert.Throws <ArgumentOutOfRangeException>(() => DateOnly.FromDayNumber(DateOnly.MaxValue.DayNumber + 1));
        }
Esempio n. 2
0
        public static bool TryParseDateOnly(char *buffer, int len, out DateOnly dateOnly)
        {
            if (len is not 10 || buffer[4] is not '-' || buffer[7] is not '-')
            {
                goto Failed;
            }

            if (TryParseNumber4(buffer, 0, out int year) == false)
            {
                goto Failed;
            }

            if (TryParseNumber2(buffer, 5, out int month) == false)
            {
                goto Failed;
            }

            if (TryParseNumber2(buffer, 8, out int day) == false)
            {
                goto Failed;
            }

            dateOnly = DateOnly.FromDayNumber((int)(DateToTicks(year, month, day, 0, 0, 0, 0) / TicksPerDay));
            return(true);

Failed:
            dateOnly = default;
            return(false);
        }
Esempio n. 3
0
        public static void DayOfWeekAndDayOfYearTest()
        {
            DateTime dt       = DateTime.Today;
            DateOnly dateOnly = DateOnly.FromDayNumber((int)(dt.Ticks / TimeSpan.TicksPerDay));

            Assert.Equal(dt.DayOfWeek, dateOnly.DayOfWeek);
            Assert.Equal(dt.DayOfYear, dateOnly.DayOfYear);
        }
Esempio n. 4
0
        /// <summary>
        /// Get a random <see cref="DateOnly"/> between <paramref name="start"/> and <paramref name="end"/>.
        /// </summary>
        /// <param name="start">Start date</param>
        /// <param name="end">End date</param>
        public DateOnly BetweenDateOnly(DateOnly start, DateOnly end)
        {
            var maxDay = Math.Max(start.DayNumber, end.DayNumber);
            var minDay = Math.Min(start.DayNumber, end.DayNumber);

            var someDayNumber = this.Random.Number(minDay, maxDay);

            var dateBetween = DateOnly.FromDayNumber(someDayNumber);

            return(dateBetween);
        }
Esempio n. 5
0
        public SerializationMappingSchema(MappingSchema?mappingSchema)
            : base("RemoteContextSerialization", mappingSchema == null ? Array <MappingSchema> .Empty : new[] { mappingSchema })
        {
            SetConvertExpression <bool, string>(value => value ? "1" : "0");
            SetConvertExpression <int, string>(value => value.ToString(CultureInfo.InvariantCulture));
            SetConvertExpression <byte, string>(value => value.ToString(CultureInfo.InvariantCulture));
            SetConvertExpression <sbyte, string>(value => value.ToString(CultureInfo.InvariantCulture));
            SetConvertExpression <long, string>(value => value.ToString(CultureInfo.InvariantCulture));
            SetConvertExpression <short, string>(value => value.ToString(CultureInfo.InvariantCulture));
            SetConvertExpression <ushort, string>(value => value.ToString(CultureInfo.InvariantCulture));
            SetConvertExpression <uint, string>(value => value.ToString(CultureInfo.InvariantCulture));
            SetConvertExpression <ulong, string>(value => value.ToString(CultureInfo.InvariantCulture));
            SetConvertExpression <decimal, string>(value => value.ToString(CultureInfo.InvariantCulture));
            SetConvertExpression <double, string>(value => value.ToString("G17", CultureInfo.InvariantCulture));
            SetConvertExpression <float, string>(value => value.ToString("G9", CultureInfo.InvariantCulture));
            SetConvertExpression <char, string>(value => value.ToString(CultureInfo.InvariantCulture));
            SetConvertExpression <DateTime, string>(value => value.ToBinary().ToString(CultureInfo.InvariantCulture));
            SetConvertExpression <DateTimeOffset, string>(value => $"{value.Ticks.ToString(CultureInfo.InvariantCulture)}:{value.Offset.Ticks.ToString(CultureInfo.InvariantCulture)}");
#if NET6_0_OR_GREATER
            SetConvertExpression <DateOnly, string>(value => value.DayNumber.ToString(CultureInfo.InvariantCulture));
#endif
            SetConvertExpression <Guid, string>(value => value.ToString("N"));
            SetConvertExpression <TimeSpan, string>(value => value.Ticks.ToString(CultureInfo.InvariantCulture));
            SetConvertExpression <Binary, string>(value => Convert.ToBase64String(value.ToArray()));
            SetConvertExpression <byte[], string>(value => Convert.ToBase64String(value));

            SetConvertExpression <string, bool>(value => value == "1");
            SetConvertExpression <string, int>(value => int.Parse(value, CultureInfo.InvariantCulture));
            SetConvertExpression <string, byte>(value => byte.Parse(value, CultureInfo.InvariantCulture));
            SetConvertExpression <string, sbyte>(value => sbyte.Parse(value, CultureInfo.InvariantCulture));
            SetConvertExpression <string, long>(value => long.Parse(value, CultureInfo.InvariantCulture));
            SetConvertExpression <string, short>(value => short.Parse(value, CultureInfo.InvariantCulture));
            SetConvertExpression <string, ushort>(value => ushort.Parse(value, CultureInfo.InvariantCulture));
            SetConvertExpression <string, uint>(value => uint.Parse(value, CultureInfo.InvariantCulture));
            SetConvertExpression <string, ulong>(value => ulong.Parse(value, CultureInfo.InvariantCulture));
            SetConvertExpression <string, decimal>(value => decimal.Parse(value, CultureInfo.InvariantCulture));
            SetConvertExpression <string, double>(value => double.Parse(value, CultureInfo.InvariantCulture));
            SetConvertExpression <string, float>(value => float.Parse(value, CultureInfo.InvariantCulture));
            SetConvertExpression <string, char>(value => value[0]);
            SetConvertExpression <string, DateTime>(value => DateTime.FromBinary(long.Parse(value, CultureInfo.InvariantCulture)));
            SetConvertExpression <string, DateTimeOffset>(value => StringToDateTimeOffset(value));
#if NET6_0_OR_GREATER
            SetConvertExpression <string, DateOnly>(value => DateOnly.FromDayNumber(int.Parse(value, CultureInfo.InvariantCulture)));
#endif
            SetConvertExpression <string, Guid>(value => Guid.Parse(value));
            SetConvertExpression <string, TimeSpan>(value => TimeSpan.FromTicks(long.Parse(value, CultureInfo.InvariantCulture)));
            SetConvertExpression <string, Binary>(value => new Binary(Convert.FromBase64String(value)));
            SetConvertExpression <string, byte[]>(value => Convert.FromBase64String(value));
        }
Esempio n. 6
0
        public static void AddYearsTest()
        {
            DateOnly dateOnly = new DateOnly(2021, 1, 31);

            for (int i = 2021; i < 2040; i++)
            {
                Assert.Equal(i, dateOnly.Year);
                dateOnly = dateOnly.AddYears(1);
            }

            for (int i = dateOnly.Year; i > 2020; i--)
            {
                Assert.Equal(i, dateOnly.Year);
                dateOnly = dateOnly.AddYears(-1);
            }

            DateTime dt = DateTime.Today;

            dateOnly = DateOnly.FromDayNumber((int)(dt.Ticks / TimeSpan.TicksPerDay));

            Assert.Equal(dt.Year, dateOnly.Year);
            Assert.Equal(dt.Month, dateOnly.Month);
            Assert.Equal(dt.Day, dateOnly.Day);

            dt       = dt.AddYears(1);
            dateOnly = dateOnly.AddYears(1);
            Assert.Equal(dt.Year, dateOnly.Year);

            dt       = dt.AddYears(50);
            dateOnly = dateOnly.AddYears(50);
            Assert.Equal(dt.Year, dateOnly.Year);

            dt       = dt.AddYears(-150);
            dateOnly = dateOnly.AddYears(-150);
            Assert.Equal(dt.Year, dateOnly.Year);

            Assert.Throws <ArgumentOutOfRangeException>(() => DateOnly.MinValue.AddYears(-1));
            Assert.Throws <ArgumentOutOfRangeException>(() => DateOnly.MaxValue.AddYears(1));
        }
 static DateOnly SurrogateToUnderlying(int value) => DateOnly.FromDayNumber(value);