diff --git a/Npgsql.sln.DotSettings b/Npgsql.sln.DotSettings
index 9ff66854aa..66df659b9d 100644
--- a/Npgsql.sln.DotSettings
+++ b/Npgsql.sln.DotSettings
@@ -84,6 +84,7 @@
True
True
True
+ True
True
True
True
@@ -99,6 +100,7 @@
True
True
True
+ True
True
True
True
@@ -116,6 +118,8 @@
True
True
True
+ True
+ True
True
True
True
diff --git a/src/Npgsql.NodaTime/Internal/DateRangeHandler.cs b/src/Npgsql.NodaTime/Internal/DateRangeHandler.cs
new file mode 100644
index 0000000000..6d7ab5d442
--- /dev/null
+++ b/src/Npgsql.NodaTime/Internal/DateRangeHandler.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+using NodaTime;
+using Npgsql.BackendMessages;
+using Npgsql.Internal;
+using Npgsql.Internal.TypeHandlers;
+using Npgsql.Internal.TypeHandling;
+using Npgsql.PostgresTypes;
+using NpgsqlTypes;
+
+namespace Npgsql.NodaTime.Internal
+{
+ public partial class DateRangeHandler : RangeHandler, INpgsqlTypeHandler
+ {
+ public DateRangeHandler(PostgresType rangePostgresType, NpgsqlTypeHandler subtypeHandler)
+ : base(rangePostgresType, subtypeHandler)
+ {
+ }
+
+ async ValueTask INpgsqlTypeHandler.Read(NpgsqlReadBuffer buf, int len, bool async, FieldDescription? fieldDescription)
+ {
+ var range = await Read(buf, len, async, fieldDescription);
+ return new(range.LowerBound, range.UpperBound - Period.FromDays(1));
+ }
+
+ public override Type GetFieldType(FieldDescription? fieldDescription = null) => typeof(DateInterval);
+ public override Type GetProviderSpecificFieldType(FieldDescription? fieldDescription = null) => typeof(DateInterval);
+
+ public override async ValueTask