【发布时间】: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