Почему обрезается время при сохранении в БД колонки с типом DATE через EF6?
В БД есть колонка типа DATE. EF6 его определил как DateTime в модели. Я в него записываю DateTime.Now и сохраняю. В итоге сохраняется только дата, а время исчезает полностью.
Я прочитал, что Now вроде как может вернуть то ли милисекунды, то ли еще что-то, и из-за этого может быть несовпадение. Я попробовал явно собрать дату через конструктор, передав числами каждый элемент, но это не помогло.
Сталкивался кто-нибудь с такой проблемой?
Ответы (1 шт):
Сталкивался кто-нибудь с такой проблемой?
Все сталкивались. Просто дата и время хранятся в БД как структура из 8-ми байт. Если посмотреть на неё в "сыром" виде:
select dump (sysdate, 16) now from dual
/
NOW
-----------------------------------
Typ=13 Len=8: e4,7,c,8,15,1b,30,0
то вряд ли кому-то сразу станет понятно, что - сегодня 8-е декабря, около девяти вечера.
Поэтому, перед выводом значения с типом данных DATE оно всегда неявно преобразуется в удобочитаемое символьное значение. Это преобразование производится в соответствии с маской установленной в параметре nls_date_format. Какая часть даты или времени будет обрезана, зависит от этого параметра. Если формат неявного преобразования не устраивает, преобразуйте явно:
alter session set nls_date_format='mm/dd/rr';
select sysdate now from dual
/
NOW
--------
12/08/20
alter session set nls_date_format='hh24:mi';
/
NOW
-------
21:03
select to_char (sysdate, 'dd.mm.yyyy hh24:mi:ss') now from dual
/
NOW
-------------------
08.12.2020 21:05:07