├── .gitignore
├── FastDateTime_Tests.groupproj
├── Fast_DateTime_Test.dpr
├── Fast_DateTime_Test.dproj
├── Fast_DateTime_Test.res
├── Fast_DateTime_Test_FMX.dpr
├── Fast_DateTime_Test_FMX.dproj
├── Fast_DateTime_Test_FMX.res
├── LICENSE
├── Lazarus
├── fastdatetime_test.ico
├── fastdatetime_test.lpi
├── fastdatetime_test.lpr
├── fastdatetime_test.res
├── unit_main.lfm
└── unit_main.pas
├── README.md
├── Tee.FastDateTime.pas
├── Unit_Fast_Test.dfm
├── Unit_Fast_Test.pas
├── Unit_Fast_Test_FMX.fmx
└── Unit_Fast_Test_FMX.pas
/.gitignore:
--------------------------------------------------------------------------------
1 | # Uncomment these types if you want even more clean repository. But be careful.
2 | # It can make harm to an existing project source. Read explanations below.
3 | #
4 | # Resource files are binaries containing manifest, project icon and version info.
5 | # They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files.
6 | #*.res
7 | #
8 | # Type library file (binary). In old Delphi versions it should be stored.
9 | # Since Delphi 2009 it is produced from .ridl file and can safely be ignored.
10 | #*.tlb
11 | #
12 | # Diagram Portfolio file. Used by the diagram editor up to Delphi 7.
13 | # Uncomment this if you are not using diagrams or use newer Delphi version.
14 | #*.ddp
15 | #
16 | # Visual LiveBindings file. Added in Delphi XE2.
17 | # Uncomment this if you are not using LiveBindings Designer.
18 | #*.vlb
19 | #
20 | # Deployment Manager configuration file for your project. Added in Delphi XE2.
21 | # Uncomment this if it is not mobile development and you do not use remote debug feature.
22 | #*.deployproj
23 | #
24 | # C++ object files produced when C/C++ Output file generation is configured.
25 | # Uncomment this if you are not using external objects (zlib library for example).
26 | #*.obj
27 | #
28 |
29 | # Delphi compiler-generated binaries (safe to delete)
30 | *.exe
31 | *.dll
32 | *.bpl
33 | *.bpi
34 | *.dcp
35 | *.so
36 | *.apk
37 | *.drc
38 | *.map
39 | *.dres
40 | *.rsm
41 | *.tds
42 | *.dcu
43 | *.lib
44 | *.a
45 | *.o
46 | *.ocx
47 |
48 | # Delphi autogenerated files (duplicated info)
49 | *.cfg
50 | *.hpp
51 | *Resource.rc
52 |
53 | # Delphi local files (user-specific info)
54 | *.local
55 | *.identcache
56 | *.projdata
57 | *.tvsconfig
58 | *.dsk
59 |
60 | # Delphi history and backups
61 | __history/
62 | __recovery/
63 | *.~*
64 |
65 | # Castalia statistics file (since XE7 Castalia is distributed with Delphi)
66 | *.stat
67 |
--------------------------------------------------------------------------------
/FastDateTime_Tests.groupproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {A29CBC14-5203-4374-84DC-B220BDF0DCAD}
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | Default.Personality.12
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/Fast_DateTime_Test.dpr:
--------------------------------------------------------------------------------
1 | program Fast_DateTime_Test;
2 |
3 | uses
4 | Vcl.Forms,
5 | Unit_Fast_Test in 'Unit_Fast_Test.pas' {FormTest},
6 | Tee.FastDateTime in 'Tee.FastDateTime.pas';
7 |
8 | {$R *.res}
9 |
10 | begin
11 | {$IFOPT D+}
12 | ReportMemoryLeaksOnShutdown:=True;
13 | {$ENDIF}
14 | Application.Initialize;
15 | Application.MainFormOnTaskbar := True;
16 | Application.CreateForm(TFormTest, FormTest);
17 | Application.Run;
18 | end.
19 |
--------------------------------------------------------------------------------
/Fast_DateTime_Test.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {F8D4A8A7-007E-4636-AE1E-BDBB7444F561}
4 | 20.3
5 | VCL
6 | Fast_DateTime_Test.dpr
7 | True
8 | Release
9 | Win32
10 | 3
11 | Application
12 | Fast_DateTime_Test
13 |
14 |
15 | true
16 |
17 |
18 | true
19 | Base
20 | true
21 |
22 |
23 | true
24 | Base
25 | true
26 |
27 |
28 | true
29 | Base
30 | true
31 |
32 |
33 | true
34 | Cfg_1
35 | true
36 | true
37 |
38 |
39 | true
40 | Cfg_1
41 | true
42 | true
43 |
44 |
45 | true
46 | Base
47 | true
48 |
49 |
50 | true
51 | Cfg_2
52 | true
53 | true
54 |
55 |
56 | true
57 | Cfg_2
58 | true
59 | true
60 |
61 |
62 | Fast_DateTime_Test
63 | System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
64 | $(BDS)\bin\delphi_PROJECTICON.ico
65 | .\$(Platform)\$(Config)
66 | .\$(Platform)\$(Config)
67 | false
68 | false
69 | false
70 | false
71 | false
72 |
73 |
74 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
75 | $(BDS)\bin\default_app.manifest
76 | true
77 | DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;emsclientfiredac;DataSnapFireDAC;svnui;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;Intraweb;DBXOracleDriver;inetdb;VirtualTreesDR;emsedge;FireDACIBDriver;fmx;fmxdae;frx24;vclib;FireDACDBXDriver;dbexpress;IndyCore;FMXChartProTeeBI;vclx;dsnap;DataSnapCommon;emsclient;TeeBI;FireDACCommon;FMXTeeBI;bdertl;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;VCLChartProTeeBI;DataSnapClient;inet;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;VCLTeeBI;soaprtl;DbxCommonDriver;ibxpress;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;vcldbx;FixInsight_10_1;frxe24;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;frxDB24;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
78 | 1033
79 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
80 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
81 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
82 |
83 |
84 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
85 | $(BDS)\bin\default_app.manifest
86 | true
87 | DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;emsclientfiredac;DataSnapFireDAC;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;Intraweb;DBXOracleDriver;inetdb;VirtualTreesDR;emsedge;FireDACIBDriver;fmx;fmxdae;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;emsclient;TeeBI;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;VCLChartProTeeBI;DataSnapClient;inet;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;VCLTeeBI;soaprtl;DbxCommonDriver;ibxpress;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
88 | 1033
89 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
90 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
91 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
92 |
93 |
94 | DEBUG;$(DCC_Define)
95 | true
96 | false
97 | true
98 | true
99 | true
100 |
101 |
102 | true
103 | 1033
104 | true
105 | true
106 | 3
107 | false
108 | false
109 | PerMonitor
110 |
111 |
112 | true
113 | 1033
114 | false
115 | true
116 | true
117 | PerMonitor
118 |
119 |
120 | false
121 | RELEASE;$(DCC_Define)
122 | 0
123 | 0
124 |
125 |
126 | true
127 | Debug
128 | PerMonitor
129 |
130 |
131 | Debug
132 | PerMonitor
133 | false
134 | true
135 | 1033
136 |
137 |
138 |
139 | MainSource
140 |
141 |
142 |
143 | dfm
144 |
145 |
146 |
147 | Base
148 |
149 |
150 | Cfg_1
151 | Base
152 |
153 |
154 | Cfg_2
155 | Base
156 |
157 |
158 |
159 | Delphi.Personality.12
160 | Application
161 |
162 |
163 |
164 | Microsoft Office 2000 Sample Automation Server Wrapper Components
165 | Microsoft Office XP Sample Automation Server Wrapper Components
166 | Embarcadero C++Builder Office 2000 Servers Package
167 | Embarcadero C++Builder Office XP Servers Package
168 |
169 |
170 | Fast_DateTime_Test.dpr
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 | 1
180 |
181 |
182 | Contents\MacOS
183 | 1
184 |
185 |
186 | 0
187 |
188 |
189 |
190 |
191 | res\xml
192 | 1
193 |
194 |
195 | res\xml
196 | 1
197 |
198 |
199 |
200 |
201 | library\lib\armeabi
202 | 1
203 |
204 |
205 | library\lib\armeabi
206 | 1
207 |
208 |
209 |
210 |
211 | library\lib\armeabi-v7a
212 | 1
213 |
214 |
215 |
216 |
217 | library\lib\mips
218 | 1
219 |
220 |
221 | library\lib\mips
222 | 1
223 |
224 |
225 |
226 |
227 | library\lib\armeabi-v7a
228 | 1
229 |
230 |
231 | library\lib\arm64-v8a
232 | 1
233 |
234 |
235 |
236 |
237 | library\lib\armeabi-v7a
238 | 1
239 |
240 |
241 |
242 |
243 | res\drawable
244 | 1
245 |
246 |
247 | res\drawable
248 | 1
249 |
250 |
251 |
252 |
253 | res\drawable-anydpi-v21
254 | 1
255 |
256 |
257 | res\drawable-anydpi-v21
258 | 1
259 |
260 |
261 |
262 |
263 | res\values
264 | 1
265 |
266 |
267 | res\values
268 | 1
269 |
270 |
271 |
272 |
273 | res\values-v21
274 | 1
275 |
276 |
277 | res\values-v21
278 | 1
279 |
280 |
281 |
282 |
283 | res\values-v31
284 | 1
285 |
286 |
287 | res\values-v31
288 | 1
289 |
290 |
291 |
292 |
293 | res\values-v35
294 | 1
295 |
296 |
297 | res\values-v35
298 | 1
299 |
300 |
301 |
302 |
303 | res\drawable-anydpi-v26
304 | 1
305 |
306 |
307 | res\drawable-anydpi-v26
308 | 1
309 |
310 |
311 |
312 |
313 | res\drawable
314 | 1
315 |
316 |
317 | res\drawable
318 | 1
319 |
320 |
321 |
322 |
323 | res\drawable
324 | 1
325 |
326 |
327 | res\drawable
328 | 1
329 |
330 |
331 |
332 |
333 | res\drawable
334 | 1
335 |
336 |
337 | res\drawable
338 | 1
339 |
340 |
341 |
342 |
343 | res\drawable-anydpi-v33
344 | 1
345 |
346 |
347 | res\drawable-anydpi-v33
348 | 1
349 |
350 |
351 |
352 |
353 | res\values
354 | 1
355 |
356 |
357 | res\values
358 | 1
359 |
360 |
361 |
362 |
363 | res\values-night-v21
364 | 1
365 |
366 |
367 | res\values-night-v21
368 | 1
369 |
370 |
371 |
372 |
373 | res\drawable
374 | 1
375 |
376 |
377 | res\drawable
378 | 1
379 |
380 |
381 |
382 |
383 | res\drawable-xxhdpi
384 | 1
385 |
386 |
387 | res\drawable-xxhdpi
388 | 1
389 |
390 |
391 |
392 |
393 | res\drawable-xxxhdpi
394 | 1
395 |
396 |
397 | res\drawable-xxxhdpi
398 | 1
399 |
400 |
401 |
402 |
403 | res\drawable-ldpi
404 | 1
405 |
406 |
407 | res\drawable-ldpi
408 | 1
409 |
410 |
411 |
412 |
413 | res\drawable-mdpi
414 | 1
415 |
416 |
417 | res\drawable-mdpi
418 | 1
419 |
420 |
421 |
422 |
423 | res\drawable-hdpi
424 | 1
425 |
426 |
427 | res\drawable-hdpi
428 | 1
429 |
430 |
431 |
432 |
433 | res\drawable-xhdpi
434 | 1
435 |
436 |
437 | res\drawable-xhdpi
438 | 1
439 |
440 |
441 |
442 |
443 | res\drawable-mdpi
444 | 1
445 |
446 |
447 | res\drawable-mdpi
448 | 1
449 |
450 |
451 |
452 |
453 | res\drawable-hdpi
454 | 1
455 |
456 |
457 | res\drawable-hdpi
458 | 1
459 |
460 |
461 |
462 |
463 | res\drawable-xhdpi
464 | 1
465 |
466 |
467 | res\drawable-xhdpi
468 | 1
469 |
470 |
471 |
472 |
473 | res\drawable-xxhdpi
474 | 1
475 |
476 |
477 | res\drawable-xxhdpi
478 | 1
479 |
480 |
481 |
482 |
483 | res\drawable-xxxhdpi
484 | 1
485 |
486 |
487 | res\drawable-xxxhdpi
488 | 1
489 |
490 |
491 |
492 |
493 | res\drawable-small
494 | 1
495 |
496 |
497 | res\drawable-small
498 | 1
499 |
500 |
501 |
502 |
503 | res\drawable-normal
504 | 1
505 |
506 |
507 | res\drawable-normal
508 | 1
509 |
510 |
511 |
512 |
513 | res\drawable-large
514 | 1
515 |
516 |
517 | res\drawable-large
518 | 1
519 |
520 |
521 |
522 |
523 | res\drawable-xlarge
524 | 1
525 |
526 |
527 | res\drawable-xlarge
528 | 1
529 |
530 |
531 |
532 |
533 | res\values
534 | 1
535 |
536 |
537 | res\values
538 | 1
539 |
540 |
541 |
542 |
543 | res\drawable-anydpi-v24
544 | 1
545 |
546 |
547 | res\drawable-anydpi-v24
548 | 1
549 |
550 |
551 |
552 |
553 | res\drawable
554 | 1
555 |
556 |
557 | res\drawable
558 | 1
559 |
560 |
561 |
562 |
563 | res\drawable-night-anydpi-v21
564 | 1
565 |
566 |
567 | res\drawable-night-anydpi-v21
568 | 1
569 |
570 |
571 |
572 |
573 | res\drawable-anydpi-v31
574 | 1
575 |
576 |
577 | res\drawable-anydpi-v31
578 | 1
579 |
580 |
581 |
582 |
583 | res\drawable-night-anydpi-v31
584 | 1
585 |
586 |
587 | res\drawable-night-anydpi-v31
588 | 1
589 |
590 |
591 |
592 |
593 | 1
594 |
595 |
596 | Contents\MacOS
597 | 1
598 |
599 |
600 | 0
601 |
602 |
603 |
604 |
605 | Contents\MacOS
606 | 1
607 | .framework
608 |
609 |
610 | Contents\MacOS
611 | 1
612 | .framework
613 |
614 |
615 | Contents\MacOS
616 | 1
617 | .framework
618 |
619 |
620 | 0
621 |
622 |
623 |
624 |
625 | 1
626 | .dylib
627 |
628 |
629 | 1
630 | .dylib
631 |
632 |
633 | 1
634 | .dylib
635 |
636 |
637 | Contents\MacOS
638 | 1
639 | .dylib
640 |
641 |
642 | Contents\MacOS
643 | 1
644 | .dylib
645 |
646 |
647 | Contents\MacOS
648 | 1
649 | .dylib
650 |
651 |
652 | 0
653 | .dll;.bpl
654 |
655 |
656 |
657 |
658 | 1
659 | .dylib
660 |
661 |
662 | 1
663 | .dylib
664 |
665 |
666 | 1
667 | .dylib
668 |
669 |
670 | Contents\MacOS
671 | 1
672 | .dylib
673 |
674 |
675 | Contents\MacOS
676 | 1
677 | .dylib
678 |
679 |
680 | Contents\MacOS
681 | 1
682 | .dylib
683 |
684 |
685 | 0
686 | .bpl
687 |
688 |
689 |
690 |
691 | 0
692 |
693 |
694 | 0
695 |
696 |
697 | 0
698 |
699 |
700 | 0
701 |
702 |
703 | 0
704 |
705 |
706 | Contents\Resources\StartUp\
707 | 0
708 |
709 |
710 | Contents\Resources\StartUp\
711 | 0
712 |
713 |
714 | Contents\Resources\StartUp\
715 | 0
716 |
717 |
718 | 0
719 |
720 |
721 |
722 |
723 | 1
724 |
725 |
726 | 1
727 |
728 |
729 |
730 |
731 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
732 | 1
733 |
734 |
735 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
736 | 1
737 |
738 |
739 |
740 |
741 | ..\
742 | 1
743 |
744 |
745 | ..\
746 | 1
747 |
748 |
749 | ..\
750 | 1
751 |
752 |
753 |
754 |
755 | Contents
756 | 1
757 |
758 |
759 | Contents
760 | 1
761 |
762 |
763 | Contents
764 | 1
765 |
766 |
767 |
768 |
769 | Contents\Resources
770 | 1
771 |
772 |
773 | Contents\Resources
774 | 1
775 |
776 |
777 | Contents\Resources
778 | 1
779 |
780 |
781 |
782 |
783 | library\lib\armeabi-v7a
784 | 1
785 |
786 |
787 | library\lib\arm64-v8a
788 | 1
789 |
790 |
791 | 1
792 |
793 |
794 | 1
795 |
796 |
797 | 1
798 |
799 |
800 | 1
801 |
802 |
803 | Contents\MacOS
804 | 1
805 |
806 |
807 | Contents\MacOS
808 | 1
809 |
810 |
811 | Contents\MacOS
812 | 1
813 |
814 |
815 | 0
816 |
817 |
818 |
819 |
820 | library\lib\armeabi-v7a
821 | 1
822 |
823 |
824 |
825 |
826 | 1
827 |
828 |
829 | 1
830 |
831 |
832 | 1
833 |
834 |
835 |
836 |
837 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
838 | 1
839 |
840 |
841 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
842 | 1
843 |
844 |
845 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
846 | 1
847 |
848 |
849 |
850 |
851 | ..\
852 | 1
853 |
854 |
855 | ..\
856 | 1
857 |
858 |
859 | ..\
860 | 1
861 |
862 |
863 |
864 |
865 | 1
866 |
867 |
868 | 1
869 |
870 |
871 | 1
872 |
873 |
874 |
875 |
876 | ..\$(PROJECTNAME).launchscreen
877 | 64
878 |
879 |
880 | ..\$(PROJECTNAME).launchscreen
881 | 64
882 |
883 |
884 |
885 |
886 | 1
887 |
888 |
889 | 1
890 |
891 |
892 | 1
893 |
894 |
895 |
896 |
897 | Assets
898 | 1
899 |
900 |
901 | Assets
902 | 1
903 |
904 |
905 |
906 |
907 | Assets
908 | 1
909 |
910 |
911 | Assets
912 | 1
913 |
914 |
915 |
916 |
917 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
918 | 1
919 |
920 |
921 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
922 | 1
923 |
924 |
925 |
926 |
927 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
928 | 1
929 |
930 |
931 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
932 | 1
933 |
934 |
935 |
936 |
937 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
938 | 1
939 |
940 |
941 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
942 | 1
943 |
944 |
945 |
946 |
947 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
948 | 1
949 |
950 |
951 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
952 | 1
953 |
954 |
955 |
956 |
957 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
958 | 1
959 |
960 |
961 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
962 | 1
963 |
964 |
965 |
966 |
967 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
968 | 1
969 |
970 |
971 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
972 | 1
973 |
974 |
975 |
976 |
977 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
978 | 1
979 |
980 |
981 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
982 | 1
983 |
984 |
985 |
986 |
987 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
988 | 1
989 |
990 |
991 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
992 | 1
993 |
994 |
995 |
996 |
997 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
998 | 1
999 |
1000 |
1001 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1002 | 1
1003 |
1004 |
1005 |
1006 |
1007 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1008 | 1
1009 |
1010 |
1011 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1012 | 1
1013 |
1014 |
1015 |
1016 |
1017 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1018 | 1
1019 |
1020 |
1021 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1022 | 1
1023 |
1024 |
1025 |
1026 |
1027 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1028 | 1
1029 |
1030 |
1031 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1032 | 1
1033 |
1034 |
1035 |
1036 |
1037 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1038 | 1
1039 |
1040 |
1041 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1042 | 1
1043 |
1044 |
1045 |
1046 |
1047 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1048 | 1
1049 |
1050 |
1051 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1052 | 1
1053 |
1054 |
1055 |
1056 |
1057 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1058 | 1
1059 |
1060 |
1061 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1062 | 1
1063 |
1064 |
1065 |
1066 |
1067 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1068 | 1
1069 |
1070 |
1071 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1072 | 1
1073 |
1074 |
1075 |
1076 |
1077 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1078 | 1
1079 |
1080 |
1081 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1082 | 1
1083 |
1084 |
1085 |
1086 |
1087 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1088 | 1
1089 |
1090 |
1091 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1092 | 1
1093 |
1094 |
1095 |
1096 |
1097 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1098 | 1
1099 |
1100 |
1101 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1102 | 1
1103 |
1104 |
1105 |
1106 |
1107 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1108 | 1
1109 |
1110 |
1111 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1112 | 1
1113 |
1114 |
1115 |
1116 |
1117 |
1118 |
1119 |
1120 |
1121 |
1122 |
1123 |
1124 |
1125 |
1126 |
1127 |
1128 |
1129 |
1130 | True
1131 | True
1132 |
1133 |
1134 | 12
1135 |
1136 |
1137 |
1138 |
1139 |
1140 |
--------------------------------------------------------------------------------
/Fast_DateTime_Test.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidberneda/FastDateTime/ee4aeb713f84998bc243c2b84b6cc9959bf7cc0f/Fast_DateTime_Test.res
--------------------------------------------------------------------------------
/Fast_DateTime_Test_FMX.dpr:
--------------------------------------------------------------------------------
1 | program Fast_DateTime_Test_FMX;
2 |
3 | uses
4 | System.StartUpCopy,
5 | FMX.Forms,
6 | Unit_Fast_Test_FMX in 'Unit_Fast_Test_FMX.pas' {FormTest};
7 |
8 | {$R *.res}
9 |
10 | begin
11 | Application.Initialize;
12 | Application.CreateForm(TFormTest, FormTest);
13 | Application.Run;
14 | end.
15 |
--------------------------------------------------------------------------------
/Fast_DateTime_Test_FMX.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {5CC5790A-0FD0-4C48-9208-CE945C6D731A}
4 | 20.3
5 | FMX
6 | True
7 | Release
8 | OSX64
9 | 693395
10 | Application
11 | Fast_DateTime_Test_FMX.dpr
12 |
13 |
14 | true
15 |
16 |
17 | true
18 | Base
19 | true
20 |
21 |
22 | true
23 | Base
24 | true
25 |
26 |
27 | true
28 | Base
29 | true
30 |
31 |
32 | true
33 | Base
34 | true
35 |
36 |
37 | true
38 | Base
39 | true
40 |
41 |
42 | true
43 | Base
44 | true
45 |
46 |
47 | true
48 | Base
49 | true
50 |
51 |
52 | true
53 | Base
54 | true
55 |
56 |
57 | true
58 | Base
59 | true
60 |
61 |
62 | true
63 | Base
64 | true
65 |
66 |
67 | true
68 | Cfg_1
69 | true
70 | true
71 |
72 |
73 | true
74 | Cfg_1
75 | true
76 | true
77 |
78 |
79 | true
80 | Base
81 | true
82 |
83 |
84 | true
85 | Cfg_2
86 | true
87 | true
88 |
89 |
90 | true
91 | Cfg_2
92 | true
93 | true
94 |
95 |
96 | .\$(Platform)\$(Config)
97 | .\$(Platform)\$(Config)
98 | false
99 | false
100 | false
101 | false
102 | false
103 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
104 | true
105 | true
106 | true
107 | true
108 | true
109 | true
110 | true
111 | true
112 | $(BDS)\bin\delphi_PROJECTICON.ico
113 | $(BDS)\bin\delphi_PROJECTICNS.icns
114 | Fast_DateTime_Test_FMX
115 |
116 |
117 | fmx;emshosting;DbxCommonDriver;bindengine;IndyIPCommon;emsclient;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;emsedge;bindcompfmx;ibmonitor;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;FMXChartTeeBI;inet;DataSnapCommon;fmxase;dbrtl;FireDACDBXDriver;FMXTeeGrid;CustomIPTransport;DBXInterBaseDriver;IndySystem;ibxbindings;FMXTeeBI;bindcomp;FireDACCommon;emsserverresource;inetstn;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;TeeBI;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;DataSnapFireDAC;emsclientfiredac;FireDAC;FireDACDSDriver;xmlrtl;tethering;ibxpress;dsnap;CloudService;FMXTee;DataSnapNativeClient;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage)
118 | package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=;minSdkVersion=23;targetSdkVersion=35
119 | Debug
120 | true
121 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
122 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
123 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
124 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
125 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
126 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png
127 | $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
128 | $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
129 | $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
130 | $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
131 | true
132 | true
133 | $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Monochrome.xml
134 | $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Foreground.xml
135 | $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Background.xml
136 | $(BDS)\bin\Artwork\Android\FM_VectorizedSplash.xml
137 | $(BDS)\bin\Artwork\Android\FM_VectorizedSplashDark.xml
138 | $(BDS)\bin\Artwork\Android\FM_VectorizedSplashV31.xml
139 | $(BDS)\bin\Artwork\Android\FM_VectorizedSplashV31Dark.xml
140 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
141 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
142 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
143 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
144 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
145 | false
146 | true
147 | $(BDS)\bin\Artwork\Android\FM_VectorizedNotificationIcon.xml
148 | activity-1.7.2.dex.jar;annotation-experimental-1.4.1.dex.jar;annotation-jvm-1.8.1.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-7.1.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-jvm-1.4.2.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.15.0.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.15.0.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.2.dex.jar;lifecycle-livedata-2.6.2.dex.jar;lifecycle-livedata-core-2.6.2.dex.jar;lifecycle-runtime-2.6.2.dex.jar;lifecycle-service-2.6.2.dex.jar;lifecycle-viewmodel-2.6.2.dex.jar;lifecycle-viewmodel-savedstate-2.6.2.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.5.0.dex.jar;play-services-basement-18.4.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.2.0.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.2.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar
149 |
150 |
151 | fmx;emshosting;DbxCommonDriver;bindengine;IndyIPCommon;emsclient;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;emsedge;bindcompfmx;ibmonitor;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;FMXChartTeeBI;inet;DataSnapCommon;dbrtl;FireDACDBXDriver;CustomIPTransport;DBXInterBaseDriver;IndySystem;ibxbindings;FMXTeeBI;bindcomp;FireDACCommon;emsserverresource;inetstn;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;TeeBI;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;DataSnapFireDAC;emsclientfiredac;FireDAC;FireDACDSDriver;xmlrtl;tethering;ibxpress;dsnap;CloudService;FMXTee;DataSnapNativeClient;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage)
152 | package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=;minSdkVersion=23;targetSdkVersion=35
153 | Debug
154 | true
155 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
156 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
157 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
158 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
159 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
160 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png
161 | $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
162 | $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
163 | $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
164 | $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
165 | true
166 | true
167 | $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Monochrome.xml
168 | $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Foreground.xml
169 | $(BDS)\bin\Artwork\Android\FM_AdaptiveIcon_Background.xml
170 | $(BDS)\bin\Artwork\Android\FM_VectorizedSplash.xml
171 | $(BDS)\bin\Artwork\Android\FM_VectorizedSplashDark.xml
172 | $(BDS)\bin\Artwork\Android\FM_VectorizedSplashV31.xml
173 | $(BDS)\bin\Artwork\Android\FM_VectorizedSplashV31Dark.xml
174 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
175 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
176 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
177 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
178 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
179 | false
180 | true
181 | $(BDS)\bin\Artwork\Android\FM_VectorizedNotificationIcon.xml
182 | activity-1.7.2.dex.jar;annotation-experimental-1.4.1.dex.jar;annotation-jvm-1.8.1.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-7.1.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-jvm-1.4.2.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.15.0.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.15.0.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.2.dex.jar;lifecycle-livedata-2.6.2.dex.jar;lifecycle-livedata-core-2.6.2.dex.jar;lifecycle-runtime-2.6.2.dex.jar;lifecycle-service-2.6.2.dex.jar;lifecycle-viewmodel-2.6.2.dex.jar;lifecycle-viewmodel-savedstate-2.6.2.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.5.0.dex.jar;play-services-basement-18.4.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.2.0.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.2.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar
183 |
184 |
185 | fmx;emshosting;DbxCommonDriver;bindengine;IndyIPCommon;emsclient;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;emsedge;bindcompfmx;ibmonitor;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;FMXChartTeeBI;inet;DataSnapCommon;fmxase;dbrtl;FireDACDBXDriver;FMXTeeGrid;CustomIPTransport;DBXInterBaseDriver;IndySystem;ibxbindings;FMXTeeBI;bindcomp;FireDACCommon;emsserverresource;inetstn;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;TeeBI;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;DataSnapFireDAC;emsclientfiredac;FireDAC;FireDACDSDriver;xmlrtl;tethering;ibxpress;dsnap;CloudService;FMXTee;DataSnapNativeClient;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage)
186 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers
187 | iPhoneAndiPad
188 | true
189 | Debug
190 | $(MSBuildProjectName)
191 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png
192 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
193 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
194 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png
195 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png
196 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png
197 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png
198 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
199 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
200 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png
201 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png
202 | $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png
203 | $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png
204 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
205 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
206 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png
207 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png
208 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
209 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png
210 | $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png
211 |
212 |
213 | fmx;emshosting;DbxCommonDriver;bindengine;IndyIPCommon;emsclient;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;emsedge;bindcompfmx;ibmonitor;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;FMXChartTeeBI;inet;DataSnapCommon;fmxase;dbrtl;FireDACDBXDriver;CustomIPTransport;DBXInterBaseDriver;IndySystem;ibxbindings;FMXTeeBI;bindcomp;FireDACCommon;emsserverresource;inetstn;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;TeeBI;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;DataSnapFireDAC;emsclientfiredac;FireDAC;FireDACDSDriver;xmlrtl;tethering;ibxpress;dsnap;CloudService;FMXTee;DataSnapNativeClient;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage)
214 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers
215 | iPhoneAndiPad
216 | true
217 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png
218 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
219 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
220 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png
221 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png
222 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png
223 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png
224 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
225 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
226 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png
227 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png
228 | $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png
229 | $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png
230 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
231 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
232 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png
233 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png
234 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
235 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png
236 | $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png
237 |
238 |
239 | DataSnapServer;fmx;emshosting;DbxCommonDriver;bindengine;FireDACCommonODBC;emsclient;FireDACCommonDriver;IndyProtocols;dbxcds;emsedge;bindcompfmx;inetdb;FireDACSqliteDriver;DbxClientDriver;FireDACASADriver;soapmidas;fmxFireDAC;dbexpress;FireDACInfxDriver;FMXChartTeeBI;inet;DataSnapCommon;dbrtl;FireDACOracleDriver;CustomIPTransport;FireDACMSSQLDriver;DataSnapIndy10ServerTransport;DataSnapConnectors;FireDACMongoDBDriver;IndySystem;FireDACTDataDriver;FMXTeeBI;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;inetstn;IndyCore;RESTBackendComponents;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;TeeBI;dsnapxml;DataSnapClient;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;xmlrtl;dsnap;CloudService;FireDACDb2Driver;DataSnapNativeClient;DatasnapConnectorsFreePascal;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage)
240 |
241 |
242 | DataSnapServer;fmx;emshosting;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonODBC;emsclient;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;emsedge;bindcompfmx;DBXFirebirdDriver;inetdb;ibmonitor;FireDACSqliteDriver;DbxClientDriver;FireDACASADriver;soapmidas;fmxFireDAC;dbexpress;FMXChartTeeBI;DBXMySQLDriver;inet;DataSnapCommon;fmxase;dbrtl;FireDACDBXDriver;FireDACOracleDriver;fmxdae;CustomIPTransport;FireDACMSSQLDriver;DataSnapIndy10ServerTransport;DBXInterBaseDriver;FireDACMongoDBDriver;IndySystem;FireDACTDataDriver;ibxbindings;FMXTeeBI;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;inetstn;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;RESTComponents;TeeBI;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;FireDACDSDriver;inetdbxpress;xmlrtl;tethering;ibxpress;dsnap;CloudService;DBXSybaseASADriver;DBXOracleDriver;DBXInformixDriver;fmxobj;FMXTee;DataSnapNativeClient;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage)
243 | CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface
244 | Debug
245 | true
246 |
247 |
248 | DataSnapServer;fmx;emshosting;DbxCommonDriver;bindengine;IndyIPCommon;FireDACCommonODBC;emsclient;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;FmxTeeUI;emsedge;bindcompfmx;DBXFirebirdDriver;inetdb;ibmonitor;FireDACSqliteDriver;DbxClientDriver;FireDACASADriver;soapmidas;fmxFireDAC;dbexpress;FMXChartTeeBI;DBXMySQLDriver;inet;DataSnapCommon;fmxase;dbrtl;FireDACDBXDriver;FireDACOracleDriver;fmxdae;CustomIPTransport;FireDACMSSQLDriver;DataSnapIndy10ServerTransport;DBXInterBaseDriver;FireDACMongoDBDriver;IndySystem;FireDACTDataDriver;ibxbindings;FMXTeeBI;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;inetstn;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;RESTComponents;TeeBI;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;FireDACDSDriver;inetdbxpress;xmlrtl;tethering;ibxpress;dsnap;CloudService;DBXSybaseASADriver;DBXOracleDriver;DBXInformixDriver;fmxobj;FMXTee;DataSnapNativeClient;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage)
249 | CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface
250 | Debug
251 | true
252 |
253 |
254 | vclwinx;DataSnapServer;VCLChartTeeBI;fmx;emshosting;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;DBXMSSQLDriver;FireDACCommonODBC;emsclient;FireDACCommonDriver;IndyProtocols;vclx;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;emsedge;bindcompfmx;DBXFirebirdDriver;inetdb;ibmonitor;FireDACSqliteDriver;DbxClientDriver;FireDACASADriver;VCLTeeGrid;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;FireDACInfxDriver;FMXChartTeeBI;DBXMySQLDriver;VclSmp;inet;DataSnapCommon;fmxase;vcltouch;DBXOdbcDriver;dbrtl;FireDACDBXDriver;Skia.Package.FMX;FireDACOracleDriver;fmxdae;TeeDB;FireDACMSAccDriver;FMXTeeGrid;CustomIPTransport;FireDACMSSQLDriver;DataSnapIndy10ServerTransport;DataSnapConnectors;vcldsnap;DBXInterBaseDriver;FireDACMongoDBDriver;IndySystem;FireDACTDataDriver;Skia.Package.VCL;vcldb;ibxbindings;FMXTeeBI;vclFireDAC;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;inetstn;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;TeeBI;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;DataSnapClient;DataSnapProviderClient;adortl;DBXSybaseASEDriver;DBXDb2Driver;vclimg;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;FireDACDSDriver;inetdbxpress;xmlrtl;tethering;ibxpress;bindcompvcl;dsnap;CloudService;DBXSybaseASADriver;DBXOracleDriver;FireDACDb2Driver;DBXInformixDriver;vclib;fmxobj;bindcompvclsmp;FMXTee;DataSnapNativeClient;DatasnapConnectorsFreePascal;soaprtl;VCLTeeBI;soapserver;FireDACIBDriver;$(DCC_UsePackage)
255 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
256 | Debug
257 | true
258 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
259 | 1033
260 | $(BDS)\bin\default_app.manifest
261 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
262 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
263 |
264 |
265 | vclwinx;DataSnapServer;VCLChartTeeBI;fmx;emshosting;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;DBXMSSQLDriver;FireDACCommonODBC;emsclient;FireDACCommonDriver;IndyProtocols;vclx;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;FmxTeeUI;emsedge;bindcompfmx;DBXFirebirdDriver;inetdb;ibmonitor;FireDACSqliteDriver;DbxClientDriver;FireDACASADriver;VCLTeeGrid;Tee;soapmidas;vclactnband;TeeUI;fmxFireDAC;dbexpress;FireDACInfxDriver;FMXChartTeeBI;DBXMySQLDriver;VclSmp;inet;DataSnapCommon;fmxase;vcltouch;DBXOdbcDriver;dbrtl;FireDACDBXDriver;FireDACOracleDriver;fmxdae;TeeDB;FireDACMSAccDriver;FMXTeeGrid;CustomIPTransport;FireDACMSSQLDriver;DataSnapIndy10ServerTransport;DataSnapConnectors;vcldsnap;DBXInterBaseDriver;FireDACMongoDBDriver;IndySystem;FireDACTDataDriver;Skia.Package.VCL;vcldb;ibxbindings;FMXTeeBI;vclFireDAC;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;inetstn;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;TeeBI;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;DataSnapClient;DataSnapProviderClient;adortl;DBXSybaseASEDriver;DBXDb2Driver;vclimg;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;FireDACDSDriver;inetdbxpress;xmlrtl;tethering;ibxpress;bindcompvcl;dsnap;CloudService;DBXSybaseASADriver;DBXOracleDriver;FireDACDb2Driver;DBXInformixDriver;vclib;fmxobj;bindcompvclsmp;FMXTee;DataSnapNativeClient;DatasnapConnectorsFreePascal;soaprtl;VCLTeeBI;soapserver;FireDACIBDriver;$(DCC_UsePackage)
266 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
267 | Debug
268 | true
269 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
270 | 1033
271 | $(BDS)\bin\default_app.manifest
272 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
273 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
274 |
275 |
276 | DEBUG;$(DCC_Define)
277 | true
278 | false
279 | true
280 | true
281 | true
282 | true
283 | true
284 |
285 |
286 | false
287 | PerMonitorV2
288 |
289 |
290 | PerMonitorV2
291 |
292 |
293 | false
294 | RELEASE;$(DCC_Define)
295 | 0
296 | 0
297 | false
298 |
299 |
300 | PerMonitorV2
301 | true
302 | 1033
303 |
304 |
305 | PerMonitorV2
306 |
307 |
308 |
309 | MainSource
310 |
311 |
312 |
313 | fmx
314 |
315 |
316 | Base
317 |
318 |
319 | Cfg_1
320 | Base
321 |
322 |
323 | Cfg_2
324 | Base
325 |
326 |
327 |
328 | Delphi.Personality.12
329 | Application
330 |
331 |
332 |
333 | Fast_DateTime_Test_FMX.dpr
334 |
335 |
336 | Microsoft Office 2000 Sample Automation Server Wrapper Components
337 | Microsoft Office XP Sample Automation Server Wrapper Components
338 | Embarcadero C++Builder Office 2000 Servers Package
339 | Embarcadero C++Builder Office XP Servers Package
340 |
341 |
342 |
343 |
344 |
345 | true
346 |
347 |
348 |
349 |
350 | true
351 |
352 |
353 |
354 |
355 | true
356 |
357 |
358 |
359 |
360 | Fast_DateTime_Test_FMX.exe
361 | true
362 |
363 |
364 |
365 |
366 | 1
367 |
368 |
369 | Contents\MacOS
370 | 1
371 |
372 |
373 | 0
374 |
375 |
376 |
377 |
378 | res\xml
379 | 1
380 |
381 |
382 | res\xml
383 | 1
384 |
385 |
386 |
387 |
388 | library\lib\armeabi
389 | 1
390 |
391 |
392 | library\lib\armeabi
393 | 1
394 |
395 |
396 |
397 |
398 | library\lib\armeabi-v7a
399 | 1
400 |
401 |
402 |
403 |
404 | library\lib\mips
405 | 1
406 |
407 |
408 | library\lib\mips
409 | 1
410 |
411 |
412 |
413 |
414 | library\lib\armeabi-v7a
415 | 1
416 |
417 |
418 | library\lib\arm64-v8a
419 | 1
420 |
421 |
422 |
423 |
424 | library\lib\armeabi-v7a
425 | 1
426 |
427 |
428 |
429 |
430 | res\drawable
431 | 1
432 |
433 |
434 | res\drawable
435 | 1
436 |
437 |
438 |
439 |
440 | res\drawable-anydpi-v21
441 | 1
442 |
443 |
444 | res\drawable-anydpi-v21
445 | 1
446 |
447 |
448 |
449 |
450 | res\values
451 | 1
452 |
453 |
454 | res\values
455 | 1
456 |
457 |
458 |
459 |
460 | res\values-v21
461 | 1
462 |
463 |
464 | res\values-v21
465 | 1
466 |
467 |
468 |
469 |
470 | res\values-v31
471 | 1
472 |
473 |
474 | res\values-v31
475 | 1
476 |
477 |
478 |
479 |
480 | res\values-v35
481 | 1
482 |
483 |
484 | res\values-v35
485 | 1
486 |
487 |
488 |
489 |
490 | res\drawable-anydpi-v26
491 | 1
492 |
493 |
494 | res\drawable-anydpi-v26
495 | 1
496 |
497 |
498 |
499 |
500 | res\drawable
501 | 1
502 |
503 |
504 | res\drawable
505 | 1
506 |
507 |
508 |
509 |
510 | res\drawable
511 | 1
512 |
513 |
514 | res\drawable
515 | 1
516 |
517 |
518 |
519 |
520 | res\drawable
521 | 1
522 |
523 |
524 | res\drawable
525 | 1
526 |
527 |
528 |
529 |
530 | res\drawable-anydpi-v33
531 | 1
532 |
533 |
534 | res\drawable-anydpi-v33
535 | 1
536 |
537 |
538 |
539 |
540 | res\values
541 | 1
542 |
543 |
544 | res\values
545 | 1
546 |
547 |
548 |
549 |
550 | res\values-night-v21
551 | 1
552 |
553 |
554 | res\values-night-v21
555 | 1
556 |
557 |
558 |
559 |
560 | res\drawable
561 | 1
562 |
563 |
564 | res\drawable
565 | 1
566 |
567 |
568 |
569 |
570 | res\drawable-xxhdpi
571 | 1
572 |
573 |
574 | res\drawable-xxhdpi
575 | 1
576 |
577 |
578 |
579 |
580 | res\drawable-xxxhdpi
581 | 1
582 |
583 |
584 | res\drawable-xxxhdpi
585 | 1
586 |
587 |
588 |
589 |
590 | res\drawable-ldpi
591 | 1
592 |
593 |
594 | res\drawable-ldpi
595 | 1
596 |
597 |
598 |
599 |
600 | res\drawable-mdpi
601 | 1
602 |
603 |
604 | res\drawable-mdpi
605 | 1
606 |
607 |
608 |
609 |
610 | res\drawable-hdpi
611 | 1
612 |
613 |
614 | res\drawable-hdpi
615 | 1
616 |
617 |
618 |
619 |
620 | res\drawable-xhdpi
621 | 1
622 |
623 |
624 | res\drawable-xhdpi
625 | 1
626 |
627 |
628 |
629 |
630 | res\drawable-mdpi
631 | 1
632 |
633 |
634 | res\drawable-mdpi
635 | 1
636 |
637 |
638 |
639 |
640 | res\drawable-hdpi
641 | 1
642 |
643 |
644 | res\drawable-hdpi
645 | 1
646 |
647 |
648 |
649 |
650 | res\drawable-xhdpi
651 | 1
652 |
653 |
654 | res\drawable-xhdpi
655 | 1
656 |
657 |
658 |
659 |
660 | res\drawable-xxhdpi
661 | 1
662 |
663 |
664 | res\drawable-xxhdpi
665 | 1
666 |
667 |
668 |
669 |
670 | res\drawable-xxxhdpi
671 | 1
672 |
673 |
674 | res\drawable-xxxhdpi
675 | 1
676 |
677 |
678 |
679 |
680 | res\drawable-small
681 | 1
682 |
683 |
684 | res\drawable-small
685 | 1
686 |
687 |
688 |
689 |
690 | res\drawable-normal
691 | 1
692 |
693 |
694 | res\drawable-normal
695 | 1
696 |
697 |
698 |
699 |
700 | res\drawable-large
701 | 1
702 |
703 |
704 | res\drawable-large
705 | 1
706 |
707 |
708 |
709 |
710 | res\drawable-xlarge
711 | 1
712 |
713 |
714 | res\drawable-xlarge
715 | 1
716 |
717 |
718 |
719 |
720 | res\values
721 | 1
722 |
723 |
724 | res\values
725 | 1
726 |
727 |
728 |
729 |
730 | res\drawable-anydpi-v24
731 | 1
732 |
733 |
734 | res\drawable-anydpi-v24
735 | 1
736 |
737 |
738 |
739 |
740 | res\drawable
741 | 1
742 |
743 |
744 | res\drawable
745 | 1
746 |
747 |
748 |
749 |
750 | res\drawable-night-anydpi-v21
751 | 1
752 |
753 |
754 | res\drawable-night-anydpi-v21
755 | 1
756 |
757 |
758 |
759 |
760 | res\drawable-anydpi-v31
761 | 1
762 |
763 |
764 | res\drawable-anydpi-v31
765 | 1
766 |
767 |
768 |
769 |
770 | res\drawable-night-anydpi-v31
771 | 1
772 |
773 |
774 | res\drawable-night-anydpi-v31
775 | 1
776 |
777 |
778 |
779 |
780 | 1
781 |
782 |
783 | Contents\MacOS
784 | 1
785 |
786 |
787 | 0
788 |
789 |
790 |
791 |
792 | Contents\MacOS
793 | 1
794 | .framework
795 |
796 |
797 | Contents\MacOS
798 | 1
799 | .framework
800 |
801 |
802 | Contents\MacOS
803 | 1
804 | .framework
805 |
806 |
807 | 0
808 |
809 |
810 |
811 |
812 | 1
813 | .dylib
814 |
815 |
816 | 1
817 | .dylib
818 |
819 |
820 | 1
821 | .dylib
822 |
823 |
824 | Contents\MacOS
825 | 1
826 | .dylib
827 |
828 |
829 | Contents\MacOS
830 | 1
831 | .dylib
832 |
833 |
834 | Contents\MacOS
835 | 1
836 | .dylib
837 |
838 |
839 | 0
840 | .dll;.bpl
841 |
842 |
843 |
844 |
845 | 1
846 | .dylib
847 |
848 |
849 | 1
850 | .dylib
851 |
852 |
853 | 1
854 | .dylib
855 |
856 |
857 | Contents\MacOS
858 | 1
859 | .dylib
860 |
861 |
862 | Contents\MacOS
863 | 1
864 | .dylib
865 |
866 |
867 | Contents\MacOS
868 | 1
869 | .dylib
870 |
871 |
872 | 0
873 | .bpl
874 |
875 |
876 |
877 |
878 | 0
879 |
880 |
881 | 0
882 |
883 |
884 | 0
885 |
886 |
887 | 0
888 |
889 |
890 | 0
891 |
892 |
893 | Contents\Resources\StartUp\
894 | 0
895 |
896 |
897 | Contents\Resources\StartUp\
898 | 0
899 |
900 |
901 | Contents\Resources\StartUp\
902 | 0
903 |
904 |
905 | 0
906 |
907 |
908 |
909 |
910 | 1
911 |
912 |
913 | 1
914 |
915 |
916 |
917 |
918 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
919 | 1
920 |
921 |
922 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
923 | 1
924 |
925 |
926 |
927 |
928 | ..\
929 | 1
930 |
931 |
932 | ..\
933 | 1
934 |
935 |
936 | ..\
937 | 1
938 |
939 |
940 |
941 |
942 | Contents
943 | 1
944 |
945 |
946 | Contents
947 | 1
948 |
949 |
950 | Contents
951 | 1
952 |
953 |
954 |
955 |
956 | Contents\Resources
957 | 1
958 |
959 |
960 | Contents\Resources
961 | 1
962 |
963 |
964 | Contents\Resources
965 | 1
966 |
967 |
968 |
969 |
970 | library\lib\armeabi-v7a
971 | 1
972 |
973 |
974 | library\lib\arm64-v8a
975 | 1
976 |
977 |
978 | 1
979 |
980 |
981 | 1
982 |
983 |
984 | 1
985 |
986 |
987 | 1
988 |
989 |
990 | Contents\MacOS
991 | 1
992 |
993 |
994 | Contents\MacOS
995 | 1
996 |
997 |
998 | Contents\MacOS
999 | 1
1000 |
1001 |
1002 | 0
1003 |
1004 |
1005 |
1006 |
1007 | library\lib\armeabi-v7a
1008 | 1
1009 |
1010 |
1011 |
1012 |
1013 | 1
1014 |
1015 |
1016 | 1
1017 |
1018 |
1019 | 1
1020 |
1021 |
1022 |
1023 |
1024 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
1025 | 1
1026 |
1027 |
1028 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
1029 | 1
1030 |
1031 |
1032 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
1033 | 1
1034 |
1035 |
1036 |
1037 |
1038 | ..\
1039 | 1
1040 |
1041 |
1042 | ..\
1043 | 1
1044 |
1045 |
1046 | ..\
1047 | 1
1048 |
1049 |
1050 |
1051 |
1052 | 1
1053 |
1054 |
1055 | 1
1056 |
1057 |
1058 | 1
1059 |
1060 |
1061 |
1062 |
1063 | ..\$(PROJECTNAME).launchscreen
1064 | 64
1065 |
1066 |
1067 | ..\$(PROJECTNAME).launchscreen
1068 | 64
1069 |
1070 |
1071 |
1072 |
1073 | 1
1074 |
1075 |
1076 | 1
1077 |
1078 |
1079 | 1
1080 |
1081 |
1082 |
1083 |
1084 | Assets
1085 | 1
1086 |
1087 |
1088 | Assets
1089 | 1
1090 |
1091 |
1092 |
1093 |
1094 | Assets
1095 | 1
1096 |
1097 |
1098 | Assets
1099 | 1
1100 |
1101 |
1102 |
1103 |
1104 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1105 | 1
1106 |
1107 |
1108 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1109 | 1
1110 |
1111 |
1112 |
1113 |
1114 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1115 | 1
1116 |
1117 |
1118 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1119 | 1
1120 |
1121 |
1122 |
1123 |
1124 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1125 | 1
1126 |
1127 |
1128 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1129 | 1
1130 |
1131 |
1132 |
1133 |
1134 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1135 | 1
1136 |
1137 |
1138 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1139 | 1
1140 |
1141 |
1142 |
1143 |
1144 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1145 | 1
1146 |
1147 |
1148 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1149 | 1
1150 |
1151 |
1152 |
1153 |
1154 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1155 | 1
1156 |
1157 |
1158 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1159 | 1
1160 |
1161 |
1162 |
1163 |
1164 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1165 | 1
1166 |
1167 |
1168 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1169 | 1
1170 |
1171 |
1172 |
1173 |
1174 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1175 | 1
1176 |
1177 |
1178 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1179 | 1
1180 |
1181 |
1182 |
1183 |
1184 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1185 | 1
1186 |
1187 |
1188 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1189 | 1
1190 |
1191 |
1192 |
1193 |
1194 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1195 | 1
1196 |
1197 |
1198 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1199 | 1
1200 |
1201 |
1202 |
1203 |
1204 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1205 | 1
1206 |
1207 |
1208 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1209 | 1
1210 |
1211 |
1212 |
1213 |
1214 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1215 | 1
1216 |
1217 |
1218 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1219 | 1
1220 |
1221 |
1222 |
1223 |
1224 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1225 | 1
1226 |
1227 |
1228 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1229 | 1
1230 |
1231 |
1232 |
1233 |
1234 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1235 | 1
1236 |
1237 |
1238 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1239 | 1
1240 |
1241 |
1242 |
1243 |
1244 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1245 | 1
1246 |
1247 |
1248 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1249 | 1
1250 |
1251 |
1252 |
1253 |
1254 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1255 | 1
1256 |
1257 |
1258 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1259 | 1
1260 |
1261 |
1262 |
1263 |
1264 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1265 | 1
1266 |
1267 |
1268 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1269 | 1
1270 |
1271 |
1272 |
1273 |
1274 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1275 | 1
1276 |
1277 |
1278 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1279 | 1
1280 |
1281 |
1282 |
1283 |
1284 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1285 | 1
1286 |
1287 |
1288 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1289 | 1
1290 |
1291 |
1292 |
1293 |
1294 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1295 | 1
1296 |
1297 |
1298 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1299 | 1
1300 |
1301 |
1302 |
1303 |
1304 |
1305 |
1306 |
1307 |
1308 |
1309 |
1310 |
1311 |
1312 |
1313 |
1314 |
1315 |
1316 | True
1317 | True
1318 | False
1319 | True
1320 | True
1321 | True
1322 | False
1323 | True
1324 | True
1325 | True
1326 | True
1327 |
1328 |
1329 | 12
1330 |
1331 |
1332 |
1333 |
1334 |
1335 |
--------------------------------------------------------------------------------
/Fast_DateTime_Test_FMX.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidberneda/FastDateTime/ee4aeb713f84998bc243c2b84b6cc9959bf7cc0f/Fast_DateTime_Test_FMX.res
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 David Berneda
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Lazarus/fastdatetime_test.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidberneda/FastDateTime/ee4aeb713f84998bc243c2b84b6cc9959bf7cc0f/Lazarus/fastdatetime_test.ico
--------------------------------------------------------------------------------
/Lazarus/fastdatetime_test.lpi:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
--------------------------------------------------------------------------------
/Lazarus/fastdatetime_test.lpr:
--------------------------------------------------------------------------------
1 | program fastdatetime_test;
2 |
3 | {$mode objfpc}{$H+}
4 |
5 | uses
6 | {$IFDEF UNIX}{$IFDEF UseCThreads}
7 | cthreads,
8 | {$ENDIF}{$ENDIF}
9 | Interfaces, // this includes the LCL widgetset
10 | Forms, unit_main;
11 |
12 | {$R *.res}
13 |
14 | begin
15 | RequireDerivedFormResource:=True;
16 | Application.Initialize;
17 | Application.CreateForm(TFormTest, FormTest);
18 | Application.Run;
19 | end.
20 |
21 |
--------------------------------------------------------------------------------
/Lazarus/fastdatetime_test.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidberneda/FastDateTime/ee4aeb713f84998bc243c2b84b6cc9959bf7cc0f/Lazarus/fastdatetime_test.res
--------------------------------------------------------------------------------
/Lazarus/unit_main.lfm:
--------------------------------------------------------------------------------
1 | object FormTest: TFormTest
2 | Left = 238
3 | Height = 320
4 | Top = 150
5 | Width = 365
6 | Caption = 'Tee FastDateTime Test'
7 | ClientHeight = 320
8 | ClientWidth = 365
9 | OnCreate = FormCreate
10 | LCLVersion = '1.7'
11 | Visible = False
12 | object Button1: TButton
13 | Left = 21
14 | Height = 25
15 | Top = 18
16 | Width = 75
17 | Caption = '&Test'
18 | OnClick = Button1Click
19 | TabOrder = 0
20 | end
21 | object Button2: TButton
22 | Left = 21
23 | Height = 25
24 | Top = 277
25 | Width = 75
26 | Caption = '&Verify'
27 | OnClick = Button2Click
28 | TabOrder = 1
29 | end
30 | object Memo1: TMemo
31 | Left = 24
32 | Height = 188
33 | Top = 62
34 | Width = 312
35 | TabOrder = 2
36 | end
37 | object LTest: TLabel
38 | Left = 110
39 | Height = 1
40 | Top = 284
41 | Width = 1
42 | ParentColor = False
43 | end
44 | end
45 |
--------------------------------------------------------------------------------
/Lazarus/unit_main.pas:
--------------------------------------------------------------------------------
1 | unit unit_main;
2 |
3 | //{$mode objfpc}{$H+}
4 | {$MODE Delphi}
5 |
6 | interface
7 |
8 | uses
9 | Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
10 | Tee.FastDateTime;
11 |
12 | type
13 |
14 | { TFormTest }
15 |
16 | TFormTest = class(TForm)
17 | Button1: TButton;
18 | Button2: TButton;
19 | LTest: TLabel;
20 | Memo1: TMemo;
21 | procedure Button1Click(Sender: TObject);
22 | procedure Button2Click(Sender: TObject);
23 | procedure FormCreate(Sender: TObject);
24 | private
25 | { private declarations }
26 |
27 | procedure TestDay(const D:TDateTime);
28 | procedure TestDayOfYear(const D:TDateTime);
29 | procedure TestMonth(const D:TDateTime);
30 | procedure TestYear(const D:TDateTime);
31 | public
32 | { public declarations }
33 | end;
34 |
35 | var
36 | FormTest: TFormTest;
37 |
38 | implementation
39 |
40 | {$R *.lfm}
41 |
42 | uses
43 | DateUtils;
44 |
45 | type
46 |
47 | { TStopWatch }
48 |
49 | TStopWatch=record
50 | private
51 | Old : Int64;
52 | public
53 | function ElapsedMilliseconds:Int64;
54 | class function StartNew:TStopWatch; static;
55 | end;
56 |
57 | { TStopWatch }
58 |
59 | function TStopWatch.ElapsedMilliseconds: Int64;
60 | begin
61 | result:=GetTickCount64-Old;
62 | end;
63 |
64 | class function TStopWatch.StartNew: TStopWatch;
65 | begin
66 | result.Old:=GetTickCount64;
67 | end;
68 |
69 | { TFormTest }
70 |
71 | function Diff(const ASlow,AFast:Int64):String;
72 | var tmp : Single;
73 | begin
74 | tmp:=100-(AFast*100/ASlow);
75 |
76 | result:='('+FormatFloat('0.##%',tmp)+' faster)';
77 | end;
78 |
79 | const
80 | TestTimes=5000000;
81 |
82 | procedure TFormTest.TestYear(const D:TDateTime);
83 | var t1 : TStopwatch;
84 | t2,t3 : Int64;
85 | t : Integer;
86 | y : Word;
87 | begin
88 | t1:=TStopwatch.StartNew;
89 |
90 | for t:=1 to TestTimes do
91 | y:=YearOf(D);
92 |
93 | t2:=t1.ElapsedMilliseconds;
94 |
95 | Memo1.Lines.Add('YearOf: '+IntToStr(t2)+' msec '+IntToStr(y));
96 |
97 | t1:=TStopwatch.StartNew;
98 |
99 | {$O-}
100 | for t:=1 to TestTimes do
101 | y:=TFastDateTime.YearOf(D);
102 | {$O+}
103 |
104 | t3:=t1.ElapsedMilliseconds;
105 |
106 | Memo1.Lines.Add('Fast YearOf: '+IntToStr(t3)+' msec '+IntToStr(y)+' '+Diff(t2,t3));
107 | end;
108 |
109 | procedure TFormTest.TestMonth(const D:TDateTime);
110 | var t1 : TStopwatch;
111 | t2, t3 : Int64;
112 | t : Integer;
113 | day : Word;
114 | begin
115 | t1:=TStopwatch.StartNew;
116 |
117 | for t:=1 to TestTimes do
118 | day:=MonthOf(D);
119 |
120 | t2:=t1.ElapsedMilliseconds;
121 |
122 | Memo1.Lines.Add('MonthOf: '+IntToStr(t2)+' msec '+IntToStr(day));
123 |
124 | t1:=TStopwatch.StartNew;
125 |
126 | for t:=1 to TestTimes do
127 | day:=TFastDateTime.MonthOf(D);
128 |
129 | t3:=t1.ElapsedMilliseconds;
130 |
131 | Memo1.Lines.Add('Fast MonthOf: '+IntToStr(t3)+' msec '+IntToStr(day)+' '+Diff(t2,t3));
132 | end;
133 |
134 | procedure TFormTest.TestDay(const D:TDateTime);
135 | var t1 : TStopwatch;
136 | t2,t3 : Int64;
137 | t : Integer;
138 | day : Word;
139 | begin
140 | t1:=TStopwatch.StartNew;
141 |
142 | for t:=1 to TestTimes do
143 | day:=DayOf(D);
144 |
145 | t2:=t1.ElapsedMilliseconds;
146 |
147 | Memo1.Lines.Add('DayOf: '+IntToStr(t2)+' msec '+IntToStr(day));
148 |
149 | t1:=TStopwatch.StartNew;
150 |
151 | for t:=1 to TestTimes do
152 | day:=TFastDateTime.DayOf(D);
153 |
154 | t3:=t1.ElapsedMilliseconds;
155 |
156 | Memo1.Lines.Add('Fast DayOf: '+IntToStr(t3)+' msec '+IntToStr(day)+' '+Diff(t2,t3));
157 | end;
158 |
159 | procedure TFormTest.TestDayOfYear(const D:TDateTime);
160 | var t1 : TStopwatch;
161 | t2,t3 : Int64;
162 | t : Integer;
163 | day : Word;
164 | begin
165 | t1:=TStopwatch.StartNew;
166 |
167 | for t:=1 to TestTimes do
168 | day:=DayOfTheYear(D);
169 |
170 | t2:=t1.ElapsedMilliseconds;
171 |
172 | Memo1.Lines.Add('DayOfYear: '+IntToStr(t2)+' msec '+IntToStr(day));
173 |
174 | t1:=TStopwatch.StartNew;
175 |
176 | for t:=1 to TestTimes do
177 | day:=TFastDateTime.DayOfTheYear(D);
178 |
179 | t3:=t1.ElapsedMilliseconds;
180 |
181 | Memo1.Lines.Add('Fast DayOfYear: '+IntToStr(t3)+' msec '+IntToStr(day)+' '+Diff(t2,t3));
182 | end;
183 |
184 | procedure TFormTest.Button1Click(Sender: TObject);
185 | var D : TDateTime;
186 | begin
187 | Memo1.Clear;
188 |
189 | D:=Now;
190 | //D:=EncodeDate(1994,7,1);
191 |
192 | TestYear(D);
193 |
194 | Memo1.Lines.Add('');
195 |
196 | TestMonth(D);
197 |
198 | Memo1.Lines.Add('');
199 |
200 | TestDay(D);
201 |
202 | Memo1.Lines.Add('');
203 |
204 | TestDayOfYear(D);
205 | end;
206 |
207 | procedure TFormTest.Button2Click(Sender: TObject);
208 | var t : Integer;
209 | y,m,d : Word;
210 | begin
211 | LTest.Caption:='';
212 |
213 | for t:=1 to Round(EncodeDate(2100,12,31)) do
214 | begin
215 | DecodeDate(t,y,m,d);
216 |
217 | if y<>TFastDateTime.YearOf(t) then
218 | raise Exception.Create('Wrong year: '+DateTimeToStr(t))
219 | else
220 | if m<>TFastDateTime.MonthOf(t) then
221 | raise Exception.Create('Wrong month: '+DateTimeToStr(t))
222 | else
223 | if d<>TFastDateTime.DayOf(t) then
224 | raise Exception.Create('Wrong day: '+DateTimeToStr(t))
225 | else
226 | if DayOfTheYear(t)<>TFastDateTime.DayOfTheYear(t) then
227 | raise Exception.Create('Wrong day of year: '+DateTimeToStr(t))
228 | end;
229 |
230 | LTest.Caption:='Ok';
231 | end;
232 |
233 | procedure TFormTest.FormCreate(Sender: TObject);
234 | begin
235 | Button1Click(Self);
236 | end;
237 |
238 | end.
239 |
240 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # FastDateTime
2 | Experimental optimized Delphi TDateTime functions.
3 |
4 | These functions are used in [TeeBI ultrafast queries](https://github.com/Steema/TeeBI) when filtering or grouping-by datetime fields of millions of records.
5 |
6 | Aproximate speed improvements, release-mode optimized compilation:
7 |
8 | ## Windows 11:
9 |
10 | 32-bit x86 CPU (13th gen Intel):
11 |
12 | | Function | RAD 13.0 Florence | Lazarus / FreePascal |
13 | |----------|-----------------|----------------------|
14 | |YearOf |41% faster|35% faster|
15 | |MonthOf|28% faster|0% *|
16 | |DayOf |28% faster|0% *|
17 | |DayOfTheYear|52% faster|46% faster|
18 |
19 | * Lazarus RTL DateUtils functions are very fast, different algorithm
20 |
21 | #
22 |
23 | 64-bit CPU:
24 |
25 | | Function | RAD 13.0 Florence | Lazarus / FreePascal |
26 | |----------|-----------------|----------------------|
27 | |YearOf |82% faster|(slower, FPC 62% faster)|
28 | |MonthOf|69% faster|(slower, FPC 200% faster)|
29 | |DayOf |69% faster|(slower, FPC 200% faster)|
30 | |DayOfTheYear |80% faster|(similar speed)|
31 |
32 | * Lazarus 64bit compiler gives faster execution
33 |
34 |
35 | #
36 |
37 | ## Linux Ubuntu 24.04.3 LTS
38 |
39 | 64-bit CPU:
40 |
41 | | Function | RAD 13.0 Florence |
42 | |----------|-----------------|
43 | |YearOf |55% faster|
44 | |MonthOf|49% faster|
45 | |DayOf |50% faster|
46 | |DayOfTheYear|74% faster|
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/Tee.FastDateTime.pas:
--------------------------------------------------------------------------------
1 | // Optimized DateTime routines for speed
2 | // David Berneda @davidberneda July-2016
3 | unit Tee.FastDateTime;
4 |
5 | {$IFDEF FPC}
6 | {$MODE Delphi}
7 | {$ENDIF}
8 |
9 | // Important for speed:
10 | // When not debugging, always compile this unit with Optimization ON,
11 | // Inlining ON, and Range-checking, Overflow-checking, Assertions OFF
12 | // {$O+,C-,R-,Q-}
13 |
14 | // Enable or disable fast methods
15 | {$DEFINE FASTDATE}
16 |
17 | {$IFDEF FASTDATE}
18 |
19 | {$IFDEF CPUX64}
20 |
21 | // 64bit
22 |
23 | {$IFDEF FPC}
24 | {$UNDEF FASTDATE} // FPC 64bit RTL is faster !
25 | {$ELSE}
26 | {$DEFINE FASTDAYOF}
27 | {$DEFINE FASTMONTHOF}
28 | {$DEFINE FASTDAYOFYEAR}
29 | {$DEFINE FASTYEAROF}
30 | {$ENDIF}
31 | {$ELSE}
32 |
33 | // 32bit
34 |
35 | {$IFNDEF FPC}
36 | {$DEFINE FASTDAYOF}
37 | {$DEFINE FASTMONTHOF}
38 | {$ENDIF}
39 |
40 | {$DEFINE FASTDAYOFYEAR}
41 | {$DEFINE FASTYEAROF}
42 | {$ENDIF}
43 |
44 | {$ENDIF}
45 |
46 | interface
47 |
48 | uses
49 | {$IFDEF FPC}SysUtils{$ELSE}System.SysUtils{$ENDIF};
50 |
51 | // Speed optimization, use only the Date part of timestamp
52 | {$DEFINE DATESTAMP}
53 |
54 | // Speed optimization, use lookup tables instead of loops
55 | {$DEFINE LOOKUP}
56 |
57 | type
58 | TFastDateTime=record
59 | private
60 | {$IFDEF FASTDATE}
61 | const
62 | D1 = 365;
63 | D4 = D1 * 4 + 1;
64 | D100 = D4 * 25 - 1;
65 | D400 = D100 * 4 + 1;
66 |
67 | class function CalcDayOfYear(T: Integer; out Y:Word): Word; static;
68 | class function CalcLeap(T: Integer; out D:Word): Boolean; static;
69 |
70 | {$IFDEF DATESTAMP}
71 | class function DateTimeToDateStamp(const DateTime: TDateTime): Integer; static;
72 | {$ENDIF}
73 |
74 | class function DayMonth(const T:Integer; out M:Byte): Word; overload; static;
75 |
76 | class function DayOf(const Date: Integer): Word; overload; static;
77 | class function DayOfTheYear(const Date: Integer): Word; overload; static;
78 | class function MonthOf(const Date: Integer): Byte; overload; static;
79 | class function YearOf(Date: Integer): Word; overload; static;
80 | {$ENDIF}
81 | public
82 | {$IFDEF FASTDATE}
83 | class function DayOf(const DateTime: TTimeStamp): Word; overload; inline; static;
84 | class function DayOfTheYear(const DateTime: TTimeStamp):Word; overload; inline; static;
85 | class function MonthOf(const DateTime: TTimeStamp): Byte; overload; inline; static;
86 | class function YearOf(const DateTime: TTimeStamp): Word; overload; inline; static;
87 | {$ENDIF}
88 |
89 | class function DayOf(const DateTime: TDateTime): Word; overload; inline; static;
90 | class function DayOfTheYear(const DateTime: TDateTime):Word; overload; inline; static;
91 | class function MonthOf(const DateTime: TDateTime): Byte; overload; inline; static;
92 | class function YearOf(const DateTime: TDateTime): Word; overload; inline; static;
93 | end;
94 |
95 | implementation
96 |
97 | uses
98 | {$IFDEF FPC}Math, DateUtils{$ELSE}System.Math{$ENDIF};
99 |
100 | {$IFDEF FASTDATE}
101 |
102 | // Optimized from DateUtils.pas
103 | class function TFastDateTime.YearOf(Date: Integer): Word;
104 | var
105 | D, I: Word;
106 | begin
107 | if Date <= 0 then
108 | result:= 0
109 | else
110 | begin
111 | Dec(Date);
112 | result := 1;
113 |
114 | while Date >= D400 do
115 | begin
116 | Dec(Date, D400);
117 | Inc(result, 400);
118 | end;
119 |
120 | DivMod(Date, D100, I, D);
121 |
122 | if I>0 then
123 | begin
124 | if I = 4 then
125 | begin
126 | Dec(I);
127 | Inc(D, D100);
128 | end;
129 |
130 | Inc(result, I * 100);
131 | end;
132 |
133 | DivMod(D, D4, I, D);
134 |
135 | if I>0 then
136 | Inc(result, I * 4);
137 |
138 | I := D div D1;
139 |
140 | if I>0 then
141 | begin
142 | if I = 4 then
143 | Dec(I);
144 |
145 | Inc(result, I);
146 | end;
147 | end;
148 | end;
149 |
150 | class function TFastDateTime.YearOf(const DateTime: TTimeStamp): Word;
151 | begin
152 | result:=YearOf(DateTime.Date);
153 | end;
154 |
155 | class function TFastDateTime.CalcDayOfYear(T: Integer; out Y: Word): Word;
156 | var I : Word;
157 | begin
158 | Dec(T);
159 |
160 | //Y:=400*(T div D400);
161 | //T:=T mod D400;
162 |
163 | Y := 1;
164 |
165 | while T >= D400 do
166 | begin
167 | Dec(T, D400);
168 | Inc(Y, 400);
169 | end;
170 |
171 | DivMod(T, D100, I, result);
172 |
173 | if I>0 then
174 | begin
175 | if I = 4 then
176 | begin
177 | Dec(I);
178 | Inc(result, D100);
179 | end;
180 |
181 | Inc(Y, I * 100);
182 | end;
183 |
184 | DivMod(result, D4, I, result);
185 |
186 | if I>0 then
187 | Inc(Y, I * 4);
188 |
189 | DivMod(result, D1, I, result);
190 |
191 | if I>0 then
192 | begin
193 | if I = 4 then
194 | begin
195 | Dec(I);
196 | Inc(result, D1);
197 | end;
198 |
199 | Inc(Y, I);
200 | end;
201 | end;
202 |
203 | class function TFastDateTime.CalcLeap(T: Integer; out D:Word): Boolean;
204 | var Y : Word;
205 | begin
206 | D:=CalcDayOfYear(T,Y);
207 | result:=IsLeapYear(Y);
208 | end;
209 |
210 | {$IFDEF LOOKUP}
211 | type
212 | TLeapLookup=record
213 | public
214 | const Month:Array[0..365] of Byte=
215 | (
216 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
217 | 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
218 | 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
219 | 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
220 | 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
221 | 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
222 | 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
223 | 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
224 | 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
225 | 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
226 | 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
227 | 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12
228 | );
229 |
230 | const Day:Array[0..365] of Byte=
231 | (
232 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
233 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
234 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
235 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
236 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
237 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
238 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
239 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
240 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
241 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
242 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
243 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
244 | );
245 | end;
246 |
247 | TLookup=record
248 | public
249 | const Month:Array[0..364] of Byte=
250 | (
251 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
252 | 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
253 | 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
254 | 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
255 | 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
256 | 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
257 | 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
258 | 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
259 | 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
260 | 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
261 | 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
262 | 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12
263 | );
264 |
265 | const Day:Array[0..364] of Byte=
266 | (
267 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
268 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,
269 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
270 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
271 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
272 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
273 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
274 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
275 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
276 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
277 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
278 | 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
279 | );
280 | end;
281 |
282 | {$ENDIF}
283 |
284 | class function TFastDateTime.DayMonth(const T: Integer; out M:Byte): Word;
285 | {$IFNDEF LOOKUP}
286 | type
287 | TDayTable = array[1..12] of Byte;
288 |
289 | const
290 | MonthDays: TDayTable = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
291 | LeapMonthDays: TDayTable = (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
292 |
293 | var I: Byte;
294 | {$ENDIF}
295 | begin
296 | {$IFNDEF LOOKUP}
297 | M:=1;
298 | {$ENDIF}
299 |
300 | if CalcLeap(T,result) then
301 | begin
302 | {$IFDEF LOOKUP}
303 | M:=TLeapLookup.Month[result];
304 | result:=TLeapLookup.Day[result];
305 | {$ELSE}
306 | while True do
307 | begin
308 | I := LeapMonthDays[M];
309 | if result < I then Break;
310 | Dec(result, I);
311 | Inc(M);
312 | end;
313 | {$ENDIF}
314 | end
315 | else
316 | begin
317 | {$IFDEF LOOKUP}
318 | M:=TLookup.Month[result];
319 | result:=TLookup.Day[result];
320 | {$ELSE}
321 | while True do
322 | begin
323 | I := MonthDays[M];
324 | if result < I then Break;
325 | Dec(result, I);
326 | Inc(M);
327 | end;
328 | {$ENDIF}
329 | end;
330 |
331 | {$IFNDEF LOOKUP}
332 | Inc(result);
333 | {$ENDIF}
334 | end;
335 |
336 | class function TFastDateTime.MonthOf(const Date: Integer): Byte;
337 | begin
338 | if Date<=0 then
339 | result:=0
340 | else
341 | DayMonth(Date,result);
342 | end;
343 |
344 | class function TFastDateTime.MonthOf(const DateTime: TTimeStamp): Byte;
345 | begin
346 | result:=MonthOf(DateTime.Date);
347 | end;
348 |
349 | class function TFastDateTime.DayOf(const Date: Integer): Word;
350 | var M: Byte;
351 | begin
352 | if Date<=0 then
353 | result:=0
354 | else
355 | result:=DayMonth(Date,M);
356 | end;
357 |
358 | class function TFastDateTime.DayOf(const DateTime: TTimeStamp): Word;
359 | begin
360 | result:=DayOf(DateTime.Date);
361 | end;
362 |
363 | class function TFastDateTime.DayOfTheYear(const Date: Integer): Word;
364 | var Y: Word;
365 | begin
366 | if Date<=0 then
367 | result:=0
368 | else
369 | result:=CalcDayOfYear(Date,Y)+1;
370 | end;
371 |
372 | {$IFDEF DATESTAMP}
373 | class function TFastDateTime.DateTimeToDateStamp(const DateTime: TDateTime): Integer;
374 | const
375 | FMSecsPerDay: Single = MSecsPerDay;
376 | IMSecsPerDay: Integer = MSecsPerDay;
377 |
378 | begin
379 | Result := DateDelta + (Round(DateTime * FMSecsPerDay) div IMSecsPerDay);
380 | end;
381 | {$ENDIF}
382 |
383 | class function TFastDateTime.DayOfTheYear(const DateTime: TTimeStamp): Word;
384 | begin
385 | result:=DayOfTheYear(DateTime.Date);
386 | end;
387 | {$ENDIF}
388 |
389 | class function TFastDateTime.DayOf(const DateTime: TDateTime): Word;
390 | begin
391 | {$IFDEF FASTDAYOF}
392 | {$IFDEF DATESTAMP}
393 | result:=DayOf(DateTimeToDateStamp(DateTime));
394 | {$ELSE}
395 | result:=DayOf(DateTimeToTimeStamp(DateTime).Date);
396 | {$ENDIF}
397 | {$ELSE}
398 | result:={$IFNDEF FPC}System.{$ENDIF}DateUtils.DayOf(DateTime);
399 | {$ENDIF}
400 | end;
401 |
402 | class function TFastDateTime.DayOfTheYear(const DateTime: TDateTime): Word;
403 | begin
404 | {$IFDEF FASTDAYOFYEAR}
405 | {$IFDEF DATESTAMP}
406 | result:=DayOfTheYear(DateTimeToDateStamp(DateTime));
407 | {$ELSE}
408 | result:=DayOfTheYear(DateTimeToTimeStamp(DateTime).Date);
409 | {$ENDIF}
410 | {$ELSE}
411 | result:={$IFNDEF FPC}System.{$ENDIF}DateUtils.DayOfTheYear(DateTime);
412 | {$ENDIF}
413 | end;
414 |
415 | class function TFastDateTime.MonthOf(const DateTime: TDateTime): Byte;
416 | begin
417 | {$IFDEF FASTMONTHOF}
418 | {$IFDEF DATESTAMP}
419 | result:=MonthOf(DateTimeToDateStamp(DateTime));
420 | {$ELSE}
421 | result:=MonthOf(DateTimeToTimeStamp(DateTime).Date);
422 | {$ENDIF}
423 | {$ELSE}
424 | result:={$IFNDEF FPC}System.{$ENDIF}DateUtils.MonthOf(DateTime);
425 | {$ENDIF}
426 | end;
427 |
428 | class function TFastDateTime.YearOf(const DateTime: TDateTime): Word;
429 | begin
430 | {$IFDEF FASTYEAROF}
431 | {$IFDEF DATESTAMP}
432 | result:=YearOf(DateTimeToDateStamp(DateTime));
433 | {$ELSE}
434 | result:=YearOf(DateTimeToTimeStamp(DateTime).Date);
435 | {$ENDIF}
436 | {$ELSE}
437 | result:={$IFNDEF FPC}System.{$ENDIF}DateUtils.YearOf(DateTime);
438 | {$ENDIF}
439 | end;
440 |
441 | end.
442 |
--------------------------------------------------------------------------------
/Unit_Fast_Test.dfm:
--------------------------------------------------------------------------------
1 | object FormTest: TFormTest
2 | Left = 0
3 | Top = 0
4 | Caption = 'FastDateTime Test'
5 | ClientHeight = 304
6 | ClientWidth = 340
7 | Color = clBtnFace
8 | Font.Charset = DEFAULT_CHARSET
9 | Font.Color = clWindowText
10 | Font.Height = -11
11 | Font.Name = 'Tahoma'
12 | Font.Style = []
13 | Position = poOwnerFormCenter
14 | OnCreate = FormCreate
15 | TextHeight = 13
16 | object LTest: TLabel
17 | Left = 112
18 | Top = 261
19 | Width = 3
20 | Height = 13
21 | end
22 | object Memo1: TMemo
23 | Left = 16
24 | Top = 56
25 | Width = 305
26 | Height = 177
27 | TabOrder = 0
28 | end
29 | object Button1: TButton
30 | Left = 16
31 | Top = 256
32 | Width = 75
33 | Height = 25
34 | Caption = '&Verify'
35 | TabOrder = 1
36 | OnClick = Button1Click
37 | end
38 | object Button2: TButton
39 | Left = 16
40 | Top = 15
41 | Width = 75
42 | Height = 25
43 | Caption = 'Test'
44 | TabOrder = 2
45 | OnClick = Button2Click
46 | end
47 | end
48 |
--------------------------------------------------------------------------------
/Unit_Fast_Test.pas:
--------------------------------------------------------------------------------
1 | unit Unit_Fast_Test;
2 |
3 | {
4 | https://github.com/davidberneda/FastDateTime
5 | }
6 |
7 | interface
8 |
9 | uses
10 | Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics,
11 | Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
12 |
13 | type
14 | TFormTest = class(TForm)
15 | Memo1: TMemo;
16 | Button1: TButton;
17 | LTest: TLabel;
18 | Button2: TButton;
19 | procedure FormCreate(Sender: TObject);
20 | procedure Button1Click(Sender: TObject);
21 | procedure Button2Click(Sender: TObject);
22 | private
23 | { Private declarations }
24 |
25 | procedure TestDay(const D:TDateTime);
26 | procedure TestDayOfYear(const D:TDateTime);
27 | procedure TestMonth(const D:TDateTime);
28 | procedure TestYear(const D:TDateTime);
29 | public
30 | { Public declarations }
31 | end;
32 |
33 | var
34 | FormTest: TFormTest;
35 |
36 | implementation
37 |
38 | {$R *.dfm}
39 |
40 | uses
41 | System.Diagnostics, Tee.FastDateTime, DateUtils;
42 |
43 | function Diff(const ASlow,AFast:Int64):String;
44 | var tmp : Single;
45 | begin
46 | tmp:=100-(AFast*100/ASlow);
47 |
48 | result:='('+FormatFloat('0.##%',tmp)+' faster)';
49 | end;
50 |
51 | const
52 | TestTimes=5000000;
53 |
54 | procedure TFormTest.TestYear(const D:TDateTime);
55 | var t1 : TStopwatch;
56 | t2,t3 : Int64;
57 | t : Integer;
58 | y : Word;
59 | begin
60 | t1:=TStopwatch.StartNew;
61 |
62 | for t:=1 to TestTimes do
63 | y:=YearOf(D);
64 |
65 | t2:=t1.ElapsedMilliseconds;
66 |
67 | Memo1.Lines.Add('YearOf: '+t2.ToString+' msec '+y.ToString);
68 |
69 | t1:=TStopwatch.StartNew;
70 |
71 | for t:=1 to TestTimes do
72 | y:=TFastDateTime.YearOf(D);
73 |
74 | t3:=t1.ElapsedMilliseconds;
75 |
76 | Memo1.Lines.Add('Fast YearOf: '+t3.ToString+' msec '+y.ToString+' '+Diff(t2,t3));
77 | end;
78 |
79 | procedure TFormTest.TestMonth(const D:TDateTime);
80 | var t1 : TStopwatch;
81 | t2, t3 : Int64;
82 | t : Integer;
83 | day : Word;
84 | begin
85 | t1:=TStopwatch.StartNew;
86 |
87 | for t:=1 to TestTimes do
88 | day:=MonthOf(D);
89 |
90 | t2:=t1.ElapsedMilliseconds;
91 |
92 | Memo1.Lines.Add('MonthOf: '+t2.ToString+' msec '+day.ToString);
93 |
94 | t1:=TStopwatch.StartNew;
95 |
96 | for t:=1 to TestTimes do
97 | day:=TFastDateTime.MonthOf(D);
98 |
99 | t3:=t1.ElapsedMilliseconds;
100 |
101 | Memo1.Lines.Add('Fast MonthOf: '+t3.ToString+' msec '+day.ToString+' '+Diff(t2,t3));
102 | end;
103 |
104 | procedure TFormTest.TestDay(const D:TDateTime);
105 | var t1 : TStopwatch;
106 | t2,t3 : Int64;
107 | t : Integer;
108 | day : Word;
109 | begin
110 | t1:=TStopwatch.StartNew;
111 |
112 | for t:=1 to TestTimes do
113 | day:=DayOf(D);
114 |
115 | t2:=t1.ElapsedMilliseconds;
116 |
117 | Memo1.Lines.Add('DayOf: '+t2.ToString+' msec '+day.ToString);
118 |
119 | t1:=TStopwatch.StartNew;
120 |
121 | for t:=1 to TestTimes do
122 | day:=TFastDateTime.DayOf(D);
123 |
124 | t3:=t1.ElapsedMilliseconds;
125 |
126 | Memo1.Lines.Add('Fast DayOf: '+t3.ToString+' msec '+day.ToString+' '+Diff(t2,t3));
127 | end;
128 |
129 | procedure TFormTest.TestDayOfYear(const D:TDateTime);
130 | var t1 : TStopwatch;
131 | t2,t3 : Int64;
132 | t : Integer;
133 | day : Word;
134 | begin
135 | t1:=TStopwatch.StartNew;
136 |
137 | for t:=1 to TestTimes do
138 | day:=DayOfTheYear(D);
139 |
140 | t2:=t1.ElapsedMilliseconds;
141 |
142 | Memo1.Lines.Add('DayOfYear: '+t2.ToString+' msec '+day.ToString);
143 |
144 | t1:=TStopwatch.StartNew;
145 |
146 | for t:=1 to TestTimes do
147 | day:=TFastDateTime.DayOfTheYear(D);
148 |
149 | t3:=t1.ElapsedMilliseconds;
150 |
151 | Memo1.Lines.Add('Fast DayOfYear: '+t3.ToString+' msec '+day.ToString+' '+Diff(t2,t3));
152 | end;
153 |
154 | procedure TFormTest.Button1Click(Sender: TObject);
155 | var t : Integer;
156 | y,m,d : Word;
157 | begin
158 | LTest.Caption:='';
159 |
160 | for t:=1 to Round(EncodeDate(2100,12,31)) do
161 | begin
162 | DecodeDate(t,y,m,d);
163 |
164 | if y<>TFastDateTime.YearOf(t) then
165 | raise Exception.Create('Wrong year: '+DateTimeToStr(t))
166 | else
167 | if m<>TFastDateTime.MonthOf(t) then
168 | raise Exception.Create('Wrong month: '+DateTimeToStr(t))
169 | else
170 | if d<>TFastDateTime.DayOf(t) then
171 | raise Exception.Create('Wrong day: '+DateTimeToStr(t))
172 | else
173 | if DayOfTheYear(t)<>TFastDateTime.DayOfTheYear(t) then
174 | raise Exception.Create('Wrong day of year: '+DateTimeToStr(t))
175 | end;
176 |
177 | LTest.Caption:='Ok';
178 | end;
179 |
180 | procedure TFormTest.Button2Click(Sender: TObject);
181 | var D : TDateTime;
182 | begin
183 | Memo1.Clear;
184 |
185 | D:=Now;
186 | //D:=EncodeDate(1994,7,1);
187 |
188 | TestYear(D);
189 |
190 | Memo1.Lines.Add('');
191 |
192 | TestMonth(D);
193 |
194 | Memo1.Lines.Add('');
195 |
196 | TestDay(D);
197 |
198 | Memo1.Lines.Add('');
199 |
200 | TestDayOfYear(D);
201 | end;
202 |
203 | procedure TFormTest.FormCreate(Sender: TObject);
204 | begin
205 | Button2Click(Self);
206 | end;
207 |
208 | end.
209 |
--------------------------------------------------------------------------------
/Unit_Fast_Test_FMX.fmx:
--------------------------------------------------------------------------------
1 | object FormTest: TFormTest
2 | Left = 0
3 | Top = 0
4 | Caption = 'FastDateTime Test'
5 | ClientHeight = 367
6 | ClientWidth = 396
7 | Position = OwnerFormCenter
8 | FormFactor.Width = 320
9 | FormFactor.Height = 480
10 | FormFactor.Devices = [Desktop]
11 | OnCreate = FormCreate
12 | DesignerMasterStyle = 0
13 | object Button1: TButton
14 | Position.X = 16.000000000000000000
15 | Position.Y = 16.000000000000000000
16 | TabOrder = 0
17 | Text = 'Test'
18 | OnClick = Button1Click
19 | end
20 | object Memo1: TMemo
21 | Touch.InteractiveGestures = [Pan, LongTap, DoubleTap]
22 | DataDetectorTypes = []
23 | Position.X = 16.000000000000000000
24 | Position.Y = 56.000000000000000000
25 | Size.Width = 329.000000000000000000
26 | Size.Height = 233.000000000000000000
27 | Size.PlatformDefault = False
28 | TabOrder = 1
29 | Viewport.Width = 325.000000000000000000
30 | Viewport.Height = 229.000000000000000000
31 | end
32 | object Button2: TButton
33 | Position.X = 16.000000000000000000
34 | Position.Y = 312.000000000000000000
35 | TabOrder = 2
36 | Text = 'Verify'
37 | OnClick = Button2Click
38 | end
39 | object Text1: TText
40 | Position.X = 112.000000000000000000
41 | Position.Y = 309.000000000000000000
42 | Size.Width = 185.000000000000000000
43 | Size.Height = 25.000000000000000000
44 | Size.PlatformDefault = False
45 | end
46 | end
47 |
--------------------------------------------------------------------------------
/Unit_Fast_Test_FMX.pas:
--------------------------------------------------------------------------------
1 | unit Unit_Fast_Test_FMX;
2 |
3 | {
4 | https://github.com/davidberneda/FastDateTime
5 | }
6 |
7 | interface
8 |
9 | uses
10 | System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
11 | FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo.Types,
12 | FMX.ScrollBox, FMX.Memo, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects;
13 |
14 | type
15 | TFormTest = class(TForm)
16 | Button1: TButton;
17 | Memo1: TMemo;
18 | Button2: TButton;
19 | Text1: TText;
20 | procedure Button1Click(Sender: TObject);
21 | procedure FormCreate(Sender: TObject);
22 | procedure Button2Click(Sender: TObject);
23 | private
24 | { Private declarations }
25 |
26 | procedure TestDay(const D:TDateTime);
27 | procedure TestDayOfYear(const D:TDateTime);
28 | procedure TestMonth(const D:TDateTime);
29 | procedure TestYear(const D:TDateTime);
30 | public
31 | { Public declarations }
32 | end;
33 |
34 | var
35 | FormTest: TFormTest;
36 |
37 | implementation
38 |
39 | {$R *.fmx}
40 |
41 | uses
42 | System.Diagnostics, Tee.FastDateTime, DateUtils;
43 |
44 | function Diff(const ASlow,AFast:Int64):String;
45 | var tmp : Single;
46 | begin
47 | tmp:=100-(AFast*100/ASlow);
48 |
49 | result:='('+FormatFloat('0.##%',tmp)+' faster)';
50 | end;
51 |
52 | const
53 | TestTimes=5000000;
54 |
55 | procedure TFormTest.TestYear(const D:TDateTime);
56 | var t1 : TStopwatch;
57 | t2,t3 : Int64;
58 | t : Integer;
59 | y : Word;
60 | begin
61 | t1:=TStopwatch.StartNew;
62 |
63 | for t:=1 to TestTimes do
64 | y:=YearOf(D);
65 |
66 | t2:=t1.ElapsedMilliseconds;
67 |
68 | Memo1.Lines.Add('YearOf: '+t2.ToString+' msec '+y.ToString);
69 |
70 | t1:=TStopwatch.StartNew;
71 |
72 | for t:=1 to TestTimes do
73 | y:=TFastDateTime.YearOf(D);
74 |
75 | t3:=t1.ElapsedMilliseconds;
76 |
77 | Memo1.Lines.Add('Fast YearOf: '+t3.ToString+' msec '+y.ToString+' '+Diff(t2,t3));
78 | end;
79 |
80 | procedure TFormTest.TestMonth(const D:TDateTime);
81 | var t1 : TStopwatch;
82 | t2, t3 : Int64;
83 | t : Integer;
84 | day : Word;
85 | begin
86 | t1:=TStopwatch.StartNew;
87 |
88 | for t:=1 to TestTimes do
89 | day:=MonthOf(D);
90 |
91 | t2:=t1.ElapsedMilliseconds;
92 |
93 | Memo1.Lines.Add('MonthOf: '+t2.ToString+' msec '+day.ToString);
94 |
95 | t1:=TStopwatch.StartNew;
96 |
97 | for t:=1 to TestTimes do
98 | day:=TFastDateTime.MonthOf(D);
99 |
100 | t3:=t1.ElapsedMilliseconds;
101 |
102 | Memo1.Lines.Add('Fast MonthOf: '+t3.ToString+' msec '+day.ToString+' '+Diff(t2,t3));
103 | end;
104 |
105 | procedure TFormTest.TestDay(const D:TDateTime);
106 | var t1 : TStopwatch;
107 | t2,t3 : Int64;
108 | t : Integer;
109 | day : Word;
110 | begin
111 | t1:=TStopwatch.StartNew;
112 |
113 | for t:=1 to TestTimes do
114 | day:=DayOf(D);
115 |
116 | t2:=t1.ElapsedMilliseconds;
117 |
118 | Memo1.Lines.Add('DayOf: '+t2.ToString+' msec '+day.ToString);
119 |
120 | t1:=TStopwatch.StartNew;
121 |
122 | for t:=1 to TestTimes do
123 | day:=TFastDateTime.DayOf(D);
124 |
125 | t3:=t1.ElapsedMilliseconds;
126 |
127 | Memo1.Lines.Add('Fast DayOf: '+t3.ToString+' msec '+day.ToString+' '+Diff(t2,t3));
128 | end;
129 |
130 | procedure TFormTest.TestDayOfYear(const D:TDateTime);
131 | var t1 : TStopwatch;
132 | t2,t3 : Int64;
133 | t : Integer;
134 | day : Word;
135 | begin
136 | t1:=TStopwatch.StartNew;
137 |
138 | for t:=1 to TestTimes do
139 | day:=DayOfTheYear(D);
140 |
141 | t2:=t1.ElapsedMilliseconds;
142 |
143 | Memo1.Lines.Add('DayOfYear: '+t2.ToString+' msec '+day.ToString);
144 |
145 | t1:=TStopwatch.StartNew;
146 |
147 | for t:=1 to TestTimes do
148 | day:=TFastDateTime.DayOfTheYear(D);
149 |
150 | t3:=t1.ElapsedMilliseconds;
151 |
152 | Memo1.Lines.Add('Fast DayOfYear: '+t3.ToString+' msec '+day.ToString+' '+Diff(t2,t3));
153 | end;
154 |
155 | procedure TFormTest.Button1Click(Sender: TObject);
156 | var D : TDateTime;
157 | begin
158 | Memo1.Text:='';
159 |
160 | D:=Now;
161 | //D:=EncodeDate(1994,7,1);
162 |
163 | TestYear(D);
164 |
165 | Memo1.Lines.Add('');
166 |
167 | TestMonth(D);
168 |
169 | Memo1.Lines.Add('');
170 |
171 | TestDay(D);
172 |
173 | Memo1.Lines.Add('');
174 |
175 | TestDayOfYear(D);
176 | end;
177 |
178 | procedure TFormTest.Button2Click(Sender: TObject);
179 | var t : Integer;
180 | y,m,d : Word;
181 | begin
182 | Text1.Text:='';
183 |
184 | for t:=1 to Round(EncodeDate(2100,12,31)) do
185 | begin
186 | DecodeDate(t,y,m,d);
187 |
188 | if y<>TFastDateTime.YearOf(t) then
189 | raise Exception.Create('Wrong year: '+DateTimeToStr(t))
190 | else
191 | if m<>TFastDateTime.MonthOf(t) then
192 | raise Exception.Create('Wrong month: '+DateTimeToStr(t))
193 | else
194 | if d<>TFastDateTime.DayOf(t) then
195 | raise Exception.Create('Wrong day: '+DateTimeToStr(t))
196 | else
197 | if DayOfTheYear(t)<>TFastDateTime.DayOfTheYear(t) then
198 | raise Exception.Create('Wrong day of year: '+DateTimeToStr(t))
199 | end;
200 |
201 | Text1.Text:='Ok';
202 | end;
203 |
204 | procedure TFormTest.FormCreate(Sender: TObject);
205 | begin
206 | Button1Click(Self);
207 | end;
208 |
209 | end.
210 |
--------------------------------------------------------------------------------