Member 11915042 Ответов: 3

Как преобразовать двойник во время?


42998.578472222223


должно быть, сегодня около 1 часа дня по восточному времени??
DateTime.FromOADate(42998.578472222223)

не дает правильного ответа

Что я уже пробовал:

пробовал различные преобразования меток времени

PIEBALDconsult

Какой ответ вы получите?
Это зависит от того, откуда он взялся.

3 Ответов

Рейтинг:
2

PIEBALDconsult

После предыдущих ответов я просто попробовал следующее В SQL Server 2014

DECLARE @d DECIMAL = 42998
DECLARE @t DECIMAL = 0.578472222223 * ( 60*60*24 )
SELECT DATEADD(ss,@t,DATEADD(dd,@d,'1900-01-01'))


и он уступает 2017-09-22 13:53:00.000 это не сегодняшняя дата.

Но это может представлять интерес:
https://support.microsoft.com/en-us/help/214326/excel-incorrectly-assumes-that-the-year-1900-is-a-leap-year[^]

Так что же это?
SELECT DATEADD ( ss , @t , DATEADD ( dd , @d - CASE WHEN @d < 60 THEN 1 ELSE 2 END , '1900-01-01' ) )


Patrice T

Я думаю, что "1900-01-01" - это день 1, поэтому с ошибкой 1900 високосного года дата должна быть правильной .

Рейтинг:
0

Graeme_Grant

Это похоже на локализованное время, в котором было закодировано значение. Если он будет преобразован здесь, в Брисбене, Австралия:

double dateValue = 42998.578472222223;
DateTime convertedDate = DateTime.FromOADate(dateValue); // 20/09/2017 1:53:00 PM
DateTime localDate = convertedDate.ToLocalTime();        // 20/09/2017 11:53:00 PM
DateTime utcDate = convertedDate.ToUniversalTime();      // 20/09/2017 3:53:00 AM


Рейтинг:
0

Patrice T

Цитата:
42998.578472222223

Это "кодировка даты и времени Excel".
Целая часть - это количество дней с начала дня, которое должно быть около 01/01/1900.
десятичная часть - это время в текущем дне.
1 - это 24 часа
0.75-18 часов
0.50-12 часов
0.25-6 часов
и так далее.
0.578472222223 - это 13: 53 или 1:53 вечера


PIEBALDconsult

Нет ли какой-то странности в отношении Excel и високосных дней?

Patrice T

Я так не думаю.
Формула для количества дней между 2 датами прекрасно известна.

Mario Z

На всякий случай, если вам интересно, есть известная проблема с Вымышленный високосный день 1900 года.
Кроме того, файлы Excel могут указать, какую из двух поддерживаемых систем дат они используют (1900 или 1904), см. Различия между 1900 и система дат 1904 в Excel.