postgresql Npgsql和/或NodaTime是否可以在带有实体框架模型的时区偏移的时间戳列上执行选择?

vdzxcuhz  于 2023-03-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(118)

我有一个Postgres数据库,它有一个timestamp with time zone列,每个记录的本地时区都不同。我想返回所有记录的“本地”时区,我已经发现了如何使用at time zone关键字。
下面的查询是我用来获取此信息的原始SQL,我想知道npgsql或NodaTime是否有扩展来生成查询的at time zone部分。

select
    e.type,
    e.description,
    -- note: `z.name` resolves to zone names like 'Australia/Sydney'
    e.date_time at time zone z.name as local_time
from events e
join sources s on e.source_id = s.id
join zones z on s.zone_id = z.id
lp0sw83n

lp0sw83n1#

假设你正在询问Entity Framework Core,PostgreSQL NodaTime插件允许你编写如下查询:

var events = await ctx.Events
    .OrderBy(e => e.LocalTimestamp.InZoneLeniently(DateTimeZoneProviders.Tzdb[e.TimeZoneId]).ToInstant())
    .ToListAsync();

换句话说,您可以在EF LINQ查询中调用NodaTime方法(如InZoneLeniently),提供程序会将其转换为AT TIME ZONE SQL表达式。
以下是NodaTime插件支持的完整翻译列表。See this article了解更多关于在PostgreSQL中使用本地时间戳和时区的信息。

相关问题