PostgreSQL now()函数给出不同的结果EFCore和DBeaver

ee7vknir  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(146)

首先,我尝试在本地系统上使用EF Core 7从应用程序执行。

public class SqlResponse
{
    public DateTime Now { get; set; }
}

个字符
result[0].Now返回3.08.2023 11:00:23
然后我在DBeaver上执行下面的查询。数据库位于远程计算机上。

SELECT now()::timestamp;


查询返回2023-08-03 14:00:32.628值。
我的数据库的时区是欧洲/伊斯坦布尔SHOW TIMEZONE;
| TimeZone |
| ------------ |
| Europe/Istanbul |
我检查我的Windows 10命令行:

C:\Users\tolgacakir>tzutil /g
Turkey Standard Time


我使用的NuGet包:

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.5" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.3" />

bpsygsoo

bpsygsoo1#

更改SqlResponse类以使用DateTimeOffset:

public class SqlResponse
{
    public DateTimeOffset Now { get; set; }
}

字符串
更新查询以使用带时区的时间戳:

var sql = @"select now()::timestamp with time zone";


将EF Core应用程序的时区调整为欧洲/伊斯坦布尔。这可以在Startup.cs文件的ConfigureServices方法中完成:

// Add the following using statements at the top of your file
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

// Inside your Startup.cs or wherever you configure your services
public void ConfigureServices(IServiceCollection services)
{
    // other configurations

services.AddDbContext<YourDbContext>(options =>
{
    options.UseNpgsql(Configuration.GetConnectionString("YourConnectionString"))
           .UseTimeZone("Europe/Istanbul"); // Set the timezone here
});

// other configurations
}


通过这些更改,您应该在EF Core和DBeaver之间获得一致的结果,两者都显示欧洲/伊斯坦布尔时区的时间戳。

相关问题