Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

TDateTime


awkward ©   (29.07.12 00:04

Перепроверил несколько раз... в KOL есть интересный комментарий:

 //TDateTime = Double; // well, it is already defined so in System.pas
 {* Basic date and time type. Integer part represents year and days (as is,
    i.e. 1-Jan-2000 is representing by value 730141, which is a number of
    days from 1-Jan-0001 to 1-Jan-2000 inclusively). Fractional part is
    representing hours, minutes, seconds and milliseconds of a day
    proportionally (like in VCL TDateTime type, e.g. 0.5 = 12:00, 0.25 = 6:00,
    etc.). }

Но тем не менее, вся информация о дельфи утверждает:
The integral part of a TDateTime value is the number of days that have passed since 12/30/1899
Из-за этого возникает проблема.... DateTime2SystemTime работает некорректно при любых условиях, что DATE0_0001, что DATE0_1601. Причем, дата, которая самой дельфи показывается как нормальная, порождает result=false в случае DATE0_1601 и просто неправильный год (смещение от 1899) и даже день (смещенный на два, 21 вместо 19) для DATE0_0001.
Проверял и на Delphi 5, и на Delphi XE2.


awkward ©   (29.07.12 00:13[1]

Нашел описание к VCLDate0.
тогда вопрос: почему нельзя было как-то унифицировать, чтоб не заставлять пользователя самого проделывать дополнительные действия?


m-sokolov (Blackman)   (01.08.12 16:04[2]

В Книге о KOL в разделе 2.4 это расписано.
Сама книга здесь http://kolmck.net/docs/KOLBook.rar


awkward ©   (01.08.12 23:20[3]

да, написано....вот только наоборот...
>для преобразования из KOL'овской даты в VCL'евскую достаточно прибавить константу VCLDate0
а мне приходится добавлять константу для преобразования VCL даты в KOLвскую...


Netspirit   (29.06.17 13:53[4]

Такой вопрос. Почему при включенной директиве DATE0_0001 этот код
var
 ST: TSystemTime;
 DT: TDateTime;

begin
 FillChar(ST, SizeOf(ST), 0);

 ST.wYear := 1;
 ST.wMonth := 1;
 ST.wDay := 1;
 
 SystemTime2DateTime(ST, DT);
end;

выдаёт в результате DT = 1.0?

Поскольку начальной датой принято 01.01.0001 00:00:00, то эта дата в формате TDateTime должна быть равной 0.0.
Тогда 02.01.0001 было бы равно 1.0 и т.д.
Предполагаю, в функции SystemTime2DateTime нужно уменьшать ST.wDay на 1. Кроме того, это потребует уменьшения на 1 констант Date1601 и VCLDate0.


Netspirit   (29.06.17 13:55[5]


> Кроме того, это потребует уменьшения на 1 констант

Пардон, возможно не уменьшения, а увеличения.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо