Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26061
Рейтинг: 2120
#16: 2017-06-02 13:47:42 ЛС | профиль | цитата
wvlas писал(а):
Milliseconds - Содержит целочисленное значение Миллисекунд для методов XXXXToHeapInt
а это для чего и зачем?

А это разложение даты на куски и собирание даты из кусков никакого отношения не имеет к строковому форматированию даты, там работает совершенно другая функция.

Редактировалось 1 раз(а), последний 2017-06-02 13:48:19
карма: 22

0
Ответов: 91
Рейтинг: 0
#17: 2017-06-02 13:55:17 ЛС | профиль | цитата

Make(delphi)
ver(4.05 build 186)
Add(MainForm,2953706,266,91)
{
Width=488
Height=149
}
Add(Edit,9693415,413,84)
{
Left=25
Top=45
Width=185
Text="32125.32"
link(onChange,7242382:doEvent1,[])
}
Add(DateConvertor,15770485,511,91)
{
Mode=16
Format="HH:mm:ss"
link(onResult,11969393:doStrCatDlm,[])
}
Add(Hub,7242382,469,84)
{
link(onEvent1,4384949:doSplit,[(501,90)(501,146)])
link(onEvent2,15770485:doConvert,[])
}
Add(StrPart,4384949,511,140)
{
Char="."
Point(Right)
Point(onNotFound)
link(onSplit,86010:doValue,[])
link(onNotFound,86010:doClear,[(555,160)(555,153)])
}
Add(Edit,2774465,658,91)
{
Left=255
Top=45
Width=185
Text=""
}
Add(StrCatDelim,11969393,595,91)
{
Delimiter=":"
Point(doClear)
link(onStrCatDlm,2774465:doText,[])
link(Str2,86010:Value,[(608,79)(590,79)(590,184)(573,184)])
}
Add(Memory,86010,567,140)
{
Default=String(00)
Point(Data)
}
Через жопу, но вроде работает.


Make(delphi)
ver(4.05 build 186)
Add(MainForm,13803910,672,273)
{
}
Add(Time,14408765,483,196)
{
Point(DateTime)
}
Add(DateConvertor,6039872,490,273)
{
Mode=9
Format="dd-MM-yyyy HH:mm:ss::"
Point(Data)
Point(Result)
link(onResult,1008384:doCalc,[])
link(Data,6614856:Var2,[])
}
Add(MathParse,1008384,532,273)
{
DataCount=1
MathStr="round(frac(frac(%1)*86400),0.001)"
link(onResult,7973961:doCopy,[])
link(X1,6614856:Var3,[(538,257)])
}
Add(GetDataEx,6614856,490,252)
{
link(Data,14408765:DateTime,[])
}
Add(Copy,7973961,574,273)
{
Position=1
Count=3
Direction=1
link(onCopy,8175536:doStrCat,[])
}
Add(Timer,11065696,434,273)
{
Interval=10
link(onTimer,6039872:doConvert,[])
}
Add(StrCat,8175536,623,273)
{
link(onStrCat,13803910:doCaption,[])
link(Str1,6039872:Result,[(629,264)(615,264)(615,313)(496,313)])
}
А в таких окнах можно и с космосом работать

Редактировалось 18 раз(а), последний 2017-06-02 20:21:28
карма: 0

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#18: 2017-06-02 14:13:34 ЛС | профиль | цитата
wvlas писал(а):
вроде работает.

Можно и проще

Схема

Add(MainForm,9993240,329,126)
{
Width=488
Height=149
}
Add(Edit,9693415,329,168)
{
Left=25
Top=45
Width=185
Text="32125.32"
link(onChange,8773421:doSplit,[])
}
Add(DateConvertor,15770485,434,168)
{
Mode=16
Format="HH:mm:ss"
link(onResult,11969393:doStrCatDlm,[])
}
Add(Edit,2774465,553,168)
{
Left=255
Top=45
Width=185
Text=""
}
Add(StrCatDelim,11969393,490,168)
{
Delimiter=":"
Point(doClear)
link(onStrCatDlm,2774465:doText,[])
link(Str2,8773421:RemaindStr,[(503,159)(482,159)(482,208)(391,208)])
}
Add(MultiStrData,8773421,385,168)
{
Char="."
Count=1
link(onPart1,15770485:doConvert,[])
}


Редактировалось 2 раз(а), последний 2017-06-02 14:15:00
карма: 22

0
Ответов: 91
Рейтинг: 0
#19: 2017-06-02 14:16:22 ЛС | профиль | цитата
nesco писал(а):
Можно и проще

если нет ms? то в результате 08:55:25: лишнее двоеточие, да и результат 08:55:25:00 правильнее. И чем проще?

Редактировалось 2 раз(а), последний 2017-06-02 14:20:43
карма: 0

0
Ответов: 4612
Рейтинг: 746
#20: 2017-06-02 14:16:50 ЛС | профиль | цитата
Есть ещё такая штука:


Add(MainForm,2953706,21,105)
{
Position=1
}
Add(Edit,16734325,210,245)
{
Left=70
Top=30
Width=20
Text="2"
}
Add(Edit,12877261,259,245)
{
Left=120
Top=30
Width=20
Text="30"
}
Add(Label,12319353,91,105)
{
Left=95
Top=35
Width=20
Height=17
Caption="min"
}
Add(DateConvertor,6747845,210,308)
{
Mode=13
Point(DMinute)
Point(DSecond)
link(onResult,10249100:doConvert,[])
link(DMinute,16734325:Text,[])
link(DSecond,12877261:Text,[(223,292)(265,292)])
}
Add(DateConvertor,10249100,280,308)
{
Mode=16
Format="yyyy.MM.dd HH:mm:ss"
link(onResult,2148308:doText,[])
}
Add(Label,7146296,140,105)
{
Left=145
Top=35
Width=42
Height=17
Caption="sec -->>"
}
Add(Button,15619068,154,308)
{
Left=15
Top=30
Width=45
link(onClick,6747845:doConvert,[])
}
Add(Label,2148308,434,308)
{
Left=190
Top=35
Width=25
Height=17
Caption="......."
}
Add(Label,12272413,21,161)
{
Left=15
Top=60
Width=174
Height=17
Caption="А ожидается 1970.01.01 00:02:30 "
}

Редактировалось 2 раз(а), последний 2017-06-02 14:30:21
карма: 26

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#21: 2017-06-02 14:52:35 ЛС | профиль | цитата
wvlas писал(а):
да и результат 08:55:25:00 правильнее

Я как бы не против, пусть будет так. Но, КМК, ms должны иметь три знака.
Netspirit писал(а):
Есть ещё такая штука:

И какие предложения?
карма: 22

0
Ответов: 4612
Рейтинг: 746
#22: 2017-06-02 15:24:36 ЛС | профиль | цитата
Нужно сформулировать правило, как действует компонент, когда на HeapIntToXXX подаётся 0 в год, месяц, день.
Вариантов вижу 4:
1) Выдавать ошибку, так как такого года-месяца-дня не существует. Не нравится мне такая идея. Но можно выдавать ошибку, если, например год(и/или месяц) не равен 0 и входит в диапазон данного типа даты, а месяц (или день) равны 0.
2) Принять и учитывать в компоненте 0-вую дату - дату, которой соответствует число 0 (Real - 01.01.0001, VCL 30.12.1899, Unix - 01.01.1970). Тогда считать, что если для HeapIntToXXX год-месяц-день равны 0, то год-месяц-день принять равными 0-вой дате в данном типе.
Это же надо будет реализовать в других методах, где нужно. Это мне нравится.
3) Для методов HeapIntToXXX - то же, что и в п.2. (если год-месяц-день равны 0), но за 0-вую принять минимально поддерживаемую у нас дату (Real - 01.01.0001). Но тогда в приведенном мной примере операции с датой Unix - в пролёте, так как будет выход за диапазон даты Unix32.
4) Можно, конечно, оставить всё как есть, и заставить пользователя цеплять на DYear\DMonth\DDay валидные значения, но это как-то костыльно, что-ли.

Правила для метода HeapIntToXXX можно распространить также на StrFmtToXXX, поскольку и там могут быть указаны 0.

По поводу даты Unix - поскольку она у нас 32-битная, то при операциях с ней вполне реальны выходы за диапазон - нужно предусмотреть выдачу ошибок и, возможно подстановку в результат соответствующего значения (если результат меньше минимального значения - в результат подставить минимальное значение, если больше максимального - максимальное).
Кроме того, можно либо ввести новый тип даты Unix64, либо расширить имеющийся, путём выдачи его в поле Real (2038 год грядёт ;-)).

Также учитывайте, что текущая реализация StrFmtToXXX/XXXToStrFmt не может обработать даты меньше 01.01.1601. Если дата меньше, то для этих методов нужно: StrFmtToXXX - выдавать ошибку, XXXToStrFmt - либо выдавать ошибку, либо перед подачей на конвертацию устанавливать порцию даты (или всю дату) равной 01.01.1601.

Редактировалось 10 раз(а), последний 2017-06-02 16:24:23
карма: 26

0
Ответов: 91
Рейтинг: 0
#23: 2017-06-02 19:25:06 ЛС | профиль | цитата
nesco писал(а):
Я как бы не против, пусть будет так. Но, КМК, ms должны иметь три знака.

Согласен, не уведомил, что интересуют только сотые, а вообще сотые начались с 25 кадров в секунду

Есть время в которое должен запуститься видеомультик, он может показаться в 08552508 или (8552508), что одно и тоже, 08 на конце - это кадры, их 25 в секунде. А в реале должен показаться в 32125.32 то есть в 08:55:25:32
мультик

Make(delphi)
ver(4.05 build 186)
Add(Length,5442612,777,392)
{
link(onLength,7382586:doEvent1,[])
link(Str,14663813:Var2,[])
}
Add(MainForm,3605936,644,245)
{
Width=920
Height=732
Caption="Пример использования Copy"
}
Add(Edit,16225249,777,280)
{
Left=50
Top=35
Width=290
Text="8552508"
}
Add(Button,14735802,630,392)
{
Left=80
Top=140
link(onClick,5442612:doLength,[])
}
Add(Memo,5322896,1926,637)
{
Left=355
Top=70
Width=140
Height=165
}
Add(Hub,7382586,889,392)
{
link(onEvent1,10883093:doCompare,[])
link(onEvent2,4725757:doCompare,[(935,405)(935,678)])
}
Add(Copy,4316397,1029,392)
{
Position=1
Count=1
link(onCopy,13114486:doEvent1,[])
link(Str,3349854:Var2,[])
}
Add(GetDataEx,14663813,777,315)
{
link(Data,16225249:Text,[])
}
Add(Copy,5325950,1127,399)
{
Position=2
Count=2
link(onCopy,13619776:doEvent1,[])
link(Str,977302:Var2,[])
}
Add(Copy,859859,1232,406)
{
Position=4
Count=2
link(onCopy,14355567:doEvent1,[])
link(Str,4737566:Var2,[])
}
Add(Hub,14355567,1288,406)
{
link(onEvent1,16443525:doCalc,[(1312,412)(1312,489)])
link(onEvent2,11551212:doCopy,[])
}
Add(Hub,13619776,1190,399)
{
link(onEvent1,13655322:doCalc,[(1222,405)(1222,489)])
link(onEvent2,859859:doCopy,[])
}
Add(Copy,11551212,1330,413)
{
Position=6
Count=2
link(onCopy,7641357:doCalc,[(1381,419)(1381,489)])
link(Str,4737566:Var3,[(1336,320)])
}
Add(GetDataEx,3349854,1029,315)
{
Angle=3
link(Data,4880377:Var3,[])
}
Add(GetDataEx,977302,1127,315)
{
Angle=3
link(Data,3349854:Var3,[])
}
Add(GetDataEx,4737566,1232,315)
{
Angle=3
link(Data,977302:Var3,[])
}
Add(If_else,10883093,952,392)
{
Op2=Integer(7)
link(onTrue,4316397:doCopy,[])
}
Add(Copy,16119807,1029,672)
{
Position=1
Count=2
link(onCopy,108907:doEvent1,[])
link(Str,4314462:Var2,[])
}
Add(Hub,108907,1085,672)
{
link(onEvent1,7926638:doCalc,[(1117,678)(1117,797)])
link(onEvent2,8335035:doCopy,[])
}
Add(Copy,8335035,1127,679)
{
Position=3
Count=2
link(onCopy,13869386:doEvent1,[])
link(Str,861568:Var2,[])
}
Add(Copy,3465293,1232,686)
{
Position=5
Count=2
link(onCopy,645948:doEvent1,[])
link(Str,11295052:Var2,[])
}
Add(Hub,645948,1288,686)
{
link(onEvent1,8531719:doCalc,[(1312,692)(1312,797)])
link(onEvent2,3697794:doCopy,[])
}
Add(Hub,13869386,1190,679)
{
link(onEvent1,9075460:doCalc,[(1222,685)(1222,797)])
link(onEvent2,3465293:doCopy,[])
}
Add(Copy,3697794,1330,693)
{
Position=7
Count=2
link(onCopy,6721768:doCalc,[(1381,699)(1381,797)])
link(Str,11295052:Var3,[(1336,642)])
}
Add(GetDataEx,4314462,1029,637)
{
Angle=3
link(Data,4880377:Var2,[(1007,642)])
}
Add(GetDataEx,861568,1127,637)
{
Angle=3
link(Data,4314462:Var3,[])
}
Add(GetDataEx,11295052,1232,637)
{
Angle=3
link(Data,861568:Var3,[])
}
Add(If_else,4725757,952,672)
{
Op2=Integer(8)
link(onTrue,16119807:doCopy,[])
}
Add(GetDataEx,4880377,1001,315)
{
Angle=3
link(Data,14663813:Var3,[])
}
Add(Hub,13114486,1085,392)
{
link(onEvent1,15349949:doCalc,[(1117,398)(1117,489)])
link(onEvent2,5325950:doCopy,[])
}
Add(MathParse,16509690,399,119)
{
}
Add(MathParse,15349949,1134,483)
{
DataCount=1
MathStr="%1 * 3600"
}
Add(MathParse,13655322,1239,483)
{
DataCount=1
MathStr="%1 * 60"
}
Add(MathParse,7641357,1400,483)
{
DataCount=1
MathStr="%1 / 25"
link(onResult,7281517:doCalc,[(1448,489)(1448,573)])
}
Add(MathParse,7281517,1463,567)
{
DataCount=4
MathStr="%1 + %2 + %3 + %4"
link(onResult,3735550:doEvent1,[(1531,573)(1531,643)])
link(X1,15349949:Result,[(1469,557)(1140,557)])
link(X2,13655322:Result,[(1476,549)(1245,549)])
link(X3,16443525:Result,[(1483,541)(1329,541)])
link(X4,7641357:Result,[(1490,533)(1406,533)])
}
Add(MathParse,16443525,1323,483)
{
DataCount=1
MathStr="%1"
}
Add(Hub,3735550,1568,637)
{
InCount=6
link(onEvent1,4790705:doEvent1,[])
link(onEvent2,10010032:doOperation,[(1596,650)(1596,727)])
}
Add(MathParse,7926638,1134,791)
{
DataCount=1
MathStr="%1 * 3600"
}
Add(MathParse,9075460,1239,791)
{
DataCount=1
MathStr="%1 * 60"
}
Add(MathParse,6721768,1400,791)
{
DataCount=1
MathStr="%1 / 25"
link(onResult,10681887:doCalc,[(1448,797)(1448,881)])
}
Add(MathParse,10681887,1463,875)
{
DataCount=4
MathStr="%1 + %2 + %3 + %4"
link(onResult,3735550:doEvent2,[(1531,881)(1531,650)])
link(X1,7926638:Result,[(1469,865)(1140,865)])
link(X2,9075460:Result,[(1476,857)(1245,857)])
link(X3,8531719:Result,[(1483,849)(1329,849)])
link(X4,6721768:Result,[(1490,841)(1406,841)])
}
Add(MathParse,8531719,1323,791)
{
DataCount=1
MathStr="%1"
}
Add(Math,10010032,1610,721)
{
OpType=1
Op2=22125.32
link(onResult,4790705:doEvent2,[(1650,727)(1650,650)])
}
Add(Hub,4790705,1659,637)
{
InCount=6
link(onEvent1,5322896:doAdd,[])
}


Редактировалось 4 раз(а), последний 2017-06-02 20:13:51
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#24: 2017-06-03 08:26:45 ЛС | профиль | цитата
Время - это прошлое. Дата - это будущее.
Сегодня 7 часов 50 минут 20 секунд 345 миллисекунд (реальные данные)
3.6.2017 - третий день (не ТРИ дня) шестого месяца (не ШЕСТЬ месяцев) 2017-го года (не 2017 лет)
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 91
Рейтинг: 0
#25: 2017-06-03 09:54:28 ЛС | профиль | цитата
Tad писал(а):
Дата - это будущее.

Ага 02.06.2017 еще наступит нескоро в будующем.

Календарная дата — порядковый номер календарного дня, порядковый номер или наименование календарного месяца и порядковый номер календарного года (Федеральный закон Российской Федерации от 3 июня 2011 г. № 107-ФЗ «Об исчислении времени»).

Время - это прошлое.

В классической физике время — это непрерывная величина, априорная характеристика мира, ничем не определяемая. В качестве основы измерения используется некая, обычно периодическая, последовательность событий, которая признаётся эталоном некоторого промежутка времени. На этом основан принцип работы часов.

Tad писал(а):
Как только поймёшь, что без БД не обойтись, тогда поговорим.

Когда только поймешь что такое дата и время и разницу между ними, тогда и поговорим.

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

--- Добавлено в 2017-06-03 10:24:59

nesco писал(а):
Я как бы не против, пусть будет так. Но, КМК, ms должны иметь три знака.

Да, при правильном форматировании преобразуемой строки. Но если преобразуется полученное число, то после целой части числа может и не быть запятой с тремя нулями.

Редактировалось 7 раз(а), последний 2017-06-03 10:35:51
карма: 0

0
Ответов: 4612
Рейтинг: 746
#26: 2017-06-06 10:35:34 ЛС | профиль | цитата
В общем, я тут покопался, и сделал модификацию компонента DateConvertor, чтобы исправить выявленные мной недостатки. Нужно обсудить эти недостатки.

DateConvertor mod 2017-06-30.zip


Скриншот:


В существующей реализации

1) Функция XXXToStrFmt не работает, если дата меньше 01.01.1601
2) Если дата меньше 13.02.1901 20:45:52, то в формате Unix её невозможно представить 32-битным числом. Происходит усечение значения и получается бяка.
3) Для HeapIntToDateUnix используется одна и та же функция, что и для DateReal. Она выдаёт результат в DateReal, затем конвертирует его в DateUnix. В приведенном на скриншоте примере результат соответствует примерно 01.01.0001 00:02:30. А эту дату нельзя представить в 32-битном формате Unix, поэтому результат согласно п.2. Почему примерно 01.01.0001? Потому что, хоть в DateReal 0-вая дата заявлена 01.01.0001, но установка год-месяц-день равными 1 (01.01.0001) даёт в результате DateReal=1.0 - то-есть, прошел один день от какой-то даты. Может быть и ошибка в работе функции SystemTime2DateTime. Выходом может быть уменьшение на 1 номера дня при HeapIntToDateReal. Обсуждение - ниже.

Предлагается следующее:

4) Для функции StrFmtToDateVCL и StrFmtToDateUnix: если порция даты равна 0, установить для результата порцию даты равную 0-вой для данного типа. Для DateReal ничего не поменяется, для VCL/Unix результат будет соответствовать ожидаемому - если мы форматируем только время, то в результате будет правильное время от 0-вой даты.
5) Предлагается для функции XXXToStrFmt, если порция даты меньше 01.01.1601, установить для этой даты минимально допустимое значение 01.01.1601, чтобы иметь возможность хотя бы отобразить время. Было бы хорошо написать свою функцию форматирования, лишенную этого недостатка (вместо системной).
6) В модификации предлагаю дату Unix выдавать в типе data_real вместо data_int. Это позволит расширить диапазон дат этого типа. Если бы захотелось и дальше обрабатывать/выдавать DateUnix в Integer, то нужно в некоторые функции добавить контроль переполнения и либо выдавать ошибку (добавить событие onError), либо подставлять минимальное/максимальное значение при переполнении минимальной/максимальной даты Unix.
7) Функции HeapIntToXXX поправлены: при 0 году, месяце, дне для каждого типа даты устанавливается год-месяц-день 0-вой даты. В общем случае 0 в этих местах не имеют смысла, поэтому им дан новый смысл - "старшие разряды" результата тоже равны 0. В примере если я хочу сконвертировать 2 мин 30 сек в DateUnix, я ожидаю получить в результат 2*60+30 сек = 150. Для остальных типов дат если порция даты 0-вая, то точно так же выдаётся только время.

Немного может быть необычным результат для HeapIntToDateVCL.

При 0 году, месяце, дне результирующая дата равна 30.12.1899 + время.
Если поставить день равным 1, то результат получается по правилам:
- год=0, поэтому подставить 1899
- месяц=0, подставить 12.
- день=1.
Результат: 01.12.1899 + время.
Если к этому ещё поставить и месяц равным 1, то результат: 01.01.1899

Необычность результата в том, что при переходе месяца-дня от 0 к 1, результирующая дата уменьшается, а не остаётся неизменной. Тогда как в HeapIntToDateReal/HeapIntToDateUnix , при дне и месяце равном 0 или 1 результат будет одинаков - 01.01.0001/01.01.1970. Просто потому что месяц/день в "0-вой" дате VCL равен 12/30, а в остальных - 1/1.


Также добавлены точки:
-OffsetUTC - смещение локального времени относительно UTC согласно настроек часового пояса (Real/VCL)
-OffsetUTCUnix - смещение локального времени относительно UTC согласно настроек часового пояса (Unix)

================================

Непонятно, зачем в коде используется проверка
if DateTime > 202751589 then exit;



================================

По поводу HeapIntToDateReal


На крайней справа картинке опечатка в нижней Label: написано "HeapIntToVCL:", а имелось в виду "HeapIntToUnix:"

На скриншоте представлена иллюстрация проблемы. При конвертировании 0-вой даты из HeapInt в результате мы должны получить 0-вую дату (в числовом виде) для данного формата.
То-есть, если ввести в год-месяц-день (остальное - 0):
-для HeapIntToDateReal 1-1-1 - должны получить 0 в DateReal
-для HeapIntToDateVCL 1899-12-30 - должны получить 0 в DateVCL
-для HeapIntToDateUnix 1970-1-1 - должны получить 0 в DateUnix

Но, для HeapIntToDateReal мы получаем дату 1.0 в DateReal, что, по-моему, есть неправильно. Конвертация этой даты в остальные форматы путём добавления соответствующих констант разницы показывает, что результат не равен 0-ым датам соответствующего формата - как раз на один день.

На скриншоте цифрой 1 отмечена невозможность форматирования даты меньше 01.01.1601.
Во всём остальном модифицированный DateConvertor не отличается от оригинального.
Цифра 2 показывает, что после HeapIntToDateReal результирующая DateReal=1 + время. При вычислении из неё других типов, результат получается смещённым на 1 день от 0-вых дат.
Цифра 3 показывает отсутствие такой проблемы при HeapIntTo в остальные форматы - если указана 0-вая дата для этого формата, то и в результате получается 0 в порции даты + время. И при приведении к Real0 и добавлении констант смещения к Real тоже получается 0-вые даты соответствующих форматов.

Вопрос - нужно ли при HeapIntToDateReal уменьшать день на 1, и перед DateRealToHeapInt увеличивать?
В моём моде это включается директивой HEAP_INT_FIX (в архиве - отключена).

Редактировалось 6 раз(а), последний 2018-09-21 16:31:15
карма: 26

1
Голосовали:Joiner
Ответов: 9906
Рейтинг: 351
#27: 2017-06-06 17:04:31 ЛС | профиль | цитата
Netspirit, спрошу просто на всякий случай.
(нет настроения вникать в особенности представления даты во всех мыслимых форматов)
По каким KOL-ом проверял
Не исключено, что какую-нибудь мелочь я и правил. Не помню точно.
карма: 9

0
Ответов: 4612
Рейтинг: 746
#28: 2017-06-06 17:32:09 ЛС | профиль | цитата
Только штатная. Так как других у меня что-то не завалялось. Только-что под рукой нашел kol_fpc_upd10.zip - работает почти аналогично штатной, с той разницей, что StrFmtToDateReal в первой колонке на первом скриншоте (HH:mm:ss) вместо пустоты в части даты выдаёт какое-то космическое значение, а время - правильно. Во всем остальном - без отличий.
Был когда-то ещё kol_delphi_upd16.zip, попробую дома поискать.

Редактировалось 1 раз(а), последний 2017-06-06 17:33:10
карма: 26

0
Ответов: 9906
Рейтинг: 351
#29: 2017-06-06 17:44:32 ЛС | профиль | цитата
Не трать время зря, бери последний
карма: 9

0
Ответов: 4612
Рейтинг: 746
#30: 2017-06-06 17:52:41 ЛС | профиль | цитата
Проверил. Примеры показывают идентичные штатному результаты. XXXToStrFmt не работает для дат меньше 01.01.1601, HeapIntToReal при год-месяц-день равных 1-1-1 выдаёт DateReal=1.0

Редактировалось 2 раз(а), последний 2017-06-06 17:54:18
карма: 26

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)