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)); }
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); }
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); }
/// <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); }
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)); }
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);