Преобразование типа Double в тип DateTime отключено на 2 дня? - PullRequest
2 голосов
/ 13 мая 2011

Я храню значения даты и времени в базе данных как тип с плавающей точкой sql (преобразованный из DateTime.OADate) по множеству причин, однако в определенных обстоятельствах было бы неплохо получить из базы данных читаемый человеком столбец даты / времени.Я обнаружил, что могу выполнить инструкцию

SELECT CAST (timerecorded_utc as DATETIME) FROM tablename

, и она выдаст мне строку с датой и временем, которую я ищу, но, похоже, она отключена ровно на 2 дня.Я понимаю, что могу просто изменить утверждение (так как во времени, представленном как двойной 1 день = 1,0), чтобы оно было

SELECT CAST (timerecorded_utc-2.0 as DATETIME) FROM tablename

НО я задавался вопросом, является ли это согласованным И мне кажется, что есть какая-то причина длянесоответствие, которое мне не хватает.

1 Ответ

7 голосов
/ 13 мая 2011

Это потому, что эпохи, в которых используются даты, разные.

DATETIME SQL Server использует 01.01.1900 00:00:00 в качестве периода, который можно увидеть, выполнив следующий запрос: SELECT CAST(0 AS DATETIME)

OADate немного странно, так как может иметь эпоху 30/12/1899 00:00:00 или 31/12/1899 00:00:00 в зависимости от того, верите ли вы, ребята из Visual Basic или Excel, соответственно , Казалось бы, из вашей двухдневной разницы .NET-версия идет с 30-й.

Таким образом, переход на два дня дает разницу в два дня в результате, когда вы конвертируете дату в два типа через необработанное число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...