#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';
Будет ли от этого какая-нибудь польза?