如何将 Postgres TIMESTAMPTZ 读取为 .NET Core DateTimeOffset

How to read Postgres TIMESTAMPTZ as .NET Core DateTimeOffset

我找不到将 postgres timestamptz 读取为 .NET DateTimeOffset 值的方法。根据文档,这似乎是可能的。谁能描述一下如何处理这个问题。

我正在使用: Postgres:11.x Npgsql: 4.1.0

代码片段极其简单:

using (var connection = new NpgsqlConnection(connectionString))
{
    connection.Open();
    using (var command = new NpgsqlCommand())
    {
        command.Connection = connection;
        command.CommandType = CommandType.Text;
        command.CommandText = "SELECT '2004-10-19 10:23:54+02'::timestamptz";
        var o = (DateTimeOffset)command.ExecuteScalar();
        Console.WriteLine(o);
    }
}

它抛出从 DateTime 到 DateTimeOffset 的无效转换异常:

Unhandled Exception: System.InvalidCastException: Unable to cast object of type 'System.DateTime' to type 'System.DateTimeOffset'

默认情况下,DateTime 值由 command.ExecuteScalar() 读取。有 reader 方法 GetFieldValue<T>() 来获取 DateTimeOffset 值。这目前不适合我,但可能是一种解决方法。

更多详情:https://github.com/npgsql/npgsql/issues/2641