/
dev-npgsql
/
npgsql
Обзор
Документация
Войти
/
dev-npgsql
/
npgsql
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Npgsql/Internal/Converters/Temporal/LegacyDateTimeConverter.cs
60 строк
2 KB
Nino Floris
Remove PgBufferedConverter virtual dispatch hop (#6574)
15 май 2026, 18:24
Не верифицирован
15 май 2026, 18:24
78d37a1
Код
Авторство
О чём код?
using System; namespace Npgsql.Internal.Converters; sealed class LegacyDateTimeConverter(bool dateTimeInfinityConversions, bool timestamp) : PgBufferedConverter<DateTime> { public override bool CanConvert(DataFormat format, out BufferRequirements bufferRequirements) { bufferRequirements = BufferRequirements.CreateFixedSize(sizeof(long)); return format is DataFormat.Binary; } public override DateTime Read(PgReader reader) { if (timestamp) { return PgTimestamp.Decode(reader.ReadInt64(), DateTimeKind.Unspecified, dateTimeInfinityConversions); } var dateTime = PgTimestamp.Decode(reader.ReadInt64(), DateTimeKind.Utc, dateTimeInfinityConversions); return (dateTime == DateTime.MinValue || dateTime == DateTime.MaxValue) && dateTimeInfinityConversions ? dateTime : dateTime.ToLocalTime(); } public override void Write(PgWriter writer, DateTime value) { if (!timestamp && value.Kind is DateTimeKind.Local) value = value.ToUniversalTime(); writer.WriteInt64(PgTimestamp.Encode(value, dateTimeInfinityConversions)); } } sealed class LegacyDateTimeOffsetConverter(bool dateTimeInfinityConversions) : PgBufferedConverter<DateTimeOffset> { public override bool CanConvert(DataFormat format, out BufferRequirements bufferRequirements) { bufferRequirements = BufferRequirements.CreateFixedSize(sizeof(long)); return format is DataFormat.Binary; } public override DateTimeOffset Read(PgReader reader) { var dateTime = PgTimestamp.Decode(reader.ReadInt64(), DateTimeKind.Utc, dateTimeInfinityConversions); if (dateTimeInfinityConversions) { if (dateTime == DateTime.MinValue) return DateTimeOffset.MinValue; if (dateTime == DateTime.MaxValue) return DateTimeOffset.MaxValue; } return dateTime.ToLocalTime(); } public override void Write(PgWriter writer, DateTimeOffset value) => writer.WriteInt64(PgTimestamp.Encode(value.UtcDateTime, dateTimeInfinityConversions)); }