|
![]() |
#1 |
Участник
|
Стандартный способ хранения дат и времени в виде числа
Целая часть - количество дней, прошедших от некоторой фиксированной даты Дробная часть - отношение количества секунд, прошедших с полуночи к количеству секунд в сутках Если от 26.03.2015 вычесть 42089 дней, то получим дату 30.12.1899. Хотя, обычно, за точку отсчета берут дату 01.01.1900. Может быть у Вас все-таки дата 28.03.2015? Тогда конвертация в дату будет выглядеть так X++: TransDate transDate; transDate = dateNull() + oxmlCell.getValue();
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
![]() |
#2 |
Участник
|
Владимир спасибо, что разъяснил.
Но все равно странно , если в excel в ячейку вбить дату (формат ячейки дата) 25.03.2015, и указать формат ячейки общий - то число будет - 42088. dateNull() + oxmlCell.getValue() = число 27.03.2015 Конечно можно отнимать 2 дня ))) но мне кажется это не есть гуд ) |
|
![]() |
#3 |
Участник
|
Нормально это. Вы же пытаетесь выполнить конвертацию из одной системы в другую. Без констант здесь не обойтись.
Для Axapta даты меньше 01.01.1900 - не существует. А что есть "базовая дата" для Excel - не известно. Очень сложно найти информацию по системным ограничениям Excel. Как следствие, остается только подгонка через константы. Кстати, скорее всего, "базовая дата" - это все-таки 31.12.1899. А еще 1 день - это результат округления при "переводе" типа Real в строку. Я имею в виду, что в Excel хранится дата вместе со временем. И время здесь больше полудня, что при округлении дает еще один дополнительный день. Попробуйте все-таки прочитать не строковую величину, а числовую. Для проверки, настройте формат отображения в ячейке Excel, чтобы видеть еще часть со временем. Подозреваю, что реально в ячейке записано нечто вроде 42087,583333
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|