Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
3 / 3 / 1
Регистрация: 18.10.2010
Сообщений: 47

Смещение даты DateTime на 2 дня при чтении из Interop.Excel

16.02.2012, 03:46. Показов 2311. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прочитал в умной книжке, что оказывается дата в экселе храниться в виде int64 дней с 1 января 1900 года.
Отсюда логично вытекает код:
C#
1
2
new DateTime(1900,1,1).AddDays(Convert.ToDouble(Cell.Value2));
//Cell - соответственно Range ячейка, из которой берём значение
И всё в общем то работает, но ВНЕЗАПНО для всех прочитаных так дат происходит смещение на 2 дня.
Т.е. в экселе первое число, а у меня - третее.

Конечно, так как смещение происходит везде, лечится это костылём "-2".
Но у меня костыли нельзя, потому что потребитель проги - ответственный, и если даже 1 на 1000 косяк - секир башка. Может там какие то различия в астрономических представлениях даты? Или чё там может быть?

Добавлено через 3 минуты
Оп, загуглил сам. Может кому поможет.

Оказывется дата не с первого января 1900, а с 31 декабря 1899 считается. Это 1 день.
А кроме того, 1900 год не високосный, но считается таковым в экселе. Итого ещё 1 день.

Вот такой вот пипец.

А костыль бы сработал в 1000 из 1000)
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.02.2012, 03:46
Ответы с готовыми решениями:

Нужно получить DateTime следующего дня от текущей даты
нужно получить DateTime следующего дня от текущей даты в '00:00:00'. К примеру сегодня '31.08.2012 15:45:02' нужно получить новый...

Смещение при чтении в типизированном файле
Возникает непонятное смещение при чтении в типизированном файле. файл имеет следующую структуру строк (в скобках указаны длины полей и...

Странное смещение при чтении файла, с использованием структуры
Сабж)) Странность выражается в том, что часть строк читается нормально, а часть - с отклонением в 2 байта. Более того - каждый следующий...

3
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
16.02.2012, 07:18
На всякий случай: есть метод FromOADate в DateTime
1
3 / 3 / 1
Регистрация: 18.10.2010
Сообщений: 47
17.02.2012, 01:54  [ТС]
Пишу на втором фреймворке для 2003 экселя, а в нём ничего ещё нету....
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
17.02.2012, 07:20
Цитата Сообщение от Virviil Посмотреть сообщение
Пишу на втором фреймворке для 2003 экселя, а в нём ничего ещё нету....
DateTime был уже во 2-м фреймворке, и этот метод там есть. Версия Excel тут ни при чем
C#
1
2
DateTime dt = DateTime.FromOADate(40956);
Console.WriteLine(dt);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.02.2012, 07:20
Помогаю со студенческими работами здесь

Не могу записать в файл Excel при Microsoft.Office.Interop.Excel.Application.Visible = False
Коллеги, доброго времени суток. Столкнулся с такой проблемой. Не могу записать в файл, когда установлена невидимость Excel. Далее...

Interop.Microsoft.Office.Interop.Excel, как исправить ошибку несовместимости версий
Error 1 Assembly 'Interop.Microsoft.Office.Interop.Excel, Version=1.7.0.0, Culture=neutral, PublicKeyToken=null' uses...

При десериализации объекта типа DateTime с формата json происходит смещение на один день назад
Перед применением сохранения даты в файл используя System.Web.Script.Serialization.JavaScriptSerializer json решил проверить вообще...

Interop.Microsoft.Office.Interop.Excel
Добрый день! Собственно есть Win10, Visual Studio 2019, есть MS Office 2007 с установленным Excel. При попытке подключиться к Excel...

Несоответствие формата даты System.DateTime и DATETIME в SQL Express Edition
Столкнулся с такой проблемой: В System.DateTime дата пишется в формате дд.мм.гггг чч.мм.сс, а DATETIME в SQL Express Edition хочет получать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru