【问题标题】:How to read DateTimeOffset from Postgres with Dapper.net?如何使用 Dapper.net 从 Postgres 读取 DateTimeOffset?
【发布时间】:2014-03-03 13:22:19
【问题描述】:

拥有这个 Postgres 表

CREATE TABLE "TimeRange"
(
  "Id" bigint NOT NULL,
  "Start" timestamp with time zone NOT NULL,
  "End" timestamp with time zone NOT NULL,
  CONSTRAINT "TimeRange_pkey" PRIMARY KEY ("Id")
)

填满

INSERT INTO "TimeRange"("Id", "Start", "End")
VALUES (1, '2014-03-03 05:55:00+01', '2014-03-03 05:55:00+01');

拥有这个 C# POCO

public class TimeRange
{
    public long Id { get; set; }
    public DateTimeOffset Start { get; set; }
    public DateTimeOffset End { get; set; }
}

选择数据..

myOpenedNpgsqlConnection.Query<TimeRange>("SELECT * FROM \"TimeRange\"");

..导致 DataException:“解析第 1 列时出错(Start=03.03.2014 05:55:00 - DateTime)”

我知道错误消息中缺少时区信息。在 PgAdmin 中运行相同的 sql 语句会返回包含时区信息的结果。

是否有任何(干净的)方法可以通过 dapper 将 Postgres“带时区的时间戳”读取到 DateTimeOffset 中?

编辑:

我发现将 POCO 修改为以下似乎可行。但说真的,没有更好的方法吗?

public class TimeRange
{
    public long Id { get; set; }
    private DateTime Start { get; set; }
    private DateTime End { get; set; }

    public DateTimeOffset StartOffset { get { return this.Start; } set { this.Start = value.UtcDateTime; } }
    public DateTimeOffset EndOffset { get { return this.Start; } set { this.Start = value.UtcDateTime; } }
}

【问题讨论】:

    标签: postgresql dapper datetimeoffset


    【解决方案1】:

    似乎 PostgreSQL 仅在内部存储 UTC 时间戳。 也许它会有所帮助,如果您在 SQL 查询中转换时区信息,PostgreSQL 会使用来自客户端会话的 TZ。

    CREATE TABLE TimeRange
    (
      Id bigint NOT NULL,
      start_at timestamp with time zone NOT NULL,
      end_at timestamp with time zone NOT NULL,
      CONSTRAINT TimeRange_pkey PRIMARY KEY (Id)
    );
    
    INSERT INTO TimeRange (Id, start_at, end_at)
    VALUES (1, '2014-03-03 05:55:00+01', '2014-03-03 05:55:00+01');
    
    
    SELECT 
      id, 
      start_at::TIMESTAMP WITH TIME ZONE as start, 
      end_at::TIMESTAMP WITH TIME ZONE as end 
    FROM TimeRange;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      相关资源
      最近更新 更多