EF Core 3.0, проблема с часовым поясом даты и времени C#

#c# #datetime #entity-framework-core #asp.net-core-webapi #.net-core-3.0

#c# #дата и время #сущность-структура-ядро #asp.net-ядро-webapi #.net-ядро-3.0

Вопрос:

Дата-время, хранящееся в БД (postgresql), имеет часовой пояс (EST), при привязке значения к коду оно преобразуется в системное местное время (IST), даже при попытке получить его в виде строки с помощью конвертеров значение преобразуется в местное время и отображается в виде строки

Пожалуйста, помогите, как игнорировать часовой пояс в ModelBuilder

 protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<TblData>(entity =>
    {

        var converter = new ValueConverter<DateTime, DateTime>(
                   v => new DateTime(),
                   v => DateTimeOffset.Parse(v.ToString()).DateTime);

        var converter1 = new ValueConverter<string, DateTime>(
                   v => new DateTime(),
                   v => v.ToString());

        entity.Property(e => e.StartTime)
                               .HasColumnName("start_time")
                               .HasColumnType("timestamp(4) with time zone");
                               .HasConversion(converter);

        //both converters return value in localtime only
    }
}
 

преобразование времени для конкретной зоны невозможно, поскольку уровень API имеет дело с несколькими базами данных часовых поясов, а API развернут как в Linux, так и в Windows server.

Пожалуйста , помогите !!!

Комментарии:

1. Сохранить дату и время в БД как UTC и преобразовать его на уровне пользовательского интерфейса?

2. Дата не преобразуется в местное время. Он находится в UTC и использует ваш машинный часовой пояс для отображения по местному времени. Вы всегда хотите оставить дату по времени UTC, особенно если вы работаете в разных часовых поясах. Если вы хотите просмотреть дату в другом часовом поясе, а затем отобразить с использованием другого часового пояса, не конвертируйте.

Ответ №1:

Обычно я устанавливаю TZ пользователя базы данных.

 ALTER ROLE my_db_user IN DATABASE my_database
    SET "TimeZone" TO 'UTC';
 

Будет ли от этого какая-нибудь польза?