/
dev-npgsql
/
npgsql
Обзор
Документация
Войти
/
dev-npgsql
/
npgsql
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
v8.0.8
src/Npgsql.NodaTime/Internal/LocalDateConverter.cs
52 строки
2 KB
Nino Floris
Handler rework (#5123)
26 сен 2023, 00:08
Не верифицирован
26 сен 2023, 00:08
0b7aecb
Код
Авторство
О чём код?
using System; using NodaTime; using Npgsql.Internal; using Npgsql.NodaTime.Properties; namespace Npgsql.NodaTime.Internal; sealed class LocalDateConverter : PgBufferedConverter<LocalDate> { readonly bool _dateTimeInfinityConversions; public LocalDateConverter(bool dateTimeInfinityConversions) => _dateTimeInfinityConversions = dateTimeInfinityConversions; public override bool CanConvert(DataFormat format, out BufferRequirements bufferRequirements) { bufferRequirements = BufferRequirements.CreateFixedSize(sizeof(int)); return format is DataFormat.Binary; } protected override LocalDate ReadCore(PgReader reader) => reader.ReadInt32() switch { int.MaxValue => _dateTimeInfinityConversions ? LocalDate.MaxIsoValue : throw new InvalidCastException(NpgsqlNodaTimeStrings.CannotReadInfinityValue), int.MinValue => _dateTimeInfinityConversions ? LocalDate.MinIsoValue : throw new InvalidCastException(NpgsqlNodaTimeStrings.CannotReadInfinityValue), var value => new LocalDate().PlusDays(value + 730119) }; protected override void WriteCore(PgWriter writer, LocalDate value) { if (_dateTimeInfinityConversions) { if (value == LocalDate.MaxIsoValue) { writer.WriteInt32(int.MaxValue); return; } if (value == LocalDate.MinIsoValue) { writer.WriteInt32(int.MinValue); return; } } var totalDaysSinceEra = Period.Between(default, value, PeriodUnits.Days).Days; writer.WriteInt32(totalDaysSinceEra - 730119); } }