├── .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 |
FormTest
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 |
FormTest
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 | <ResourceType Value="res"/> 11 | <UseXPManifest Value="True"/> 12 | <Icon Value="0"/> 13 | </General> 14 | <i18n> 15 | <EnableI18N LFM="False"/> 16 | </i18n> 17 | <VersionInfo> 18 | <StringTable ProductVersion=""/> 19 | </VersionInfo> 20 | <MacroValues Count="1"> 21 | <Macro1 Name="LCLWidgetType" Value="win32"/> 22 | </MacroValues> 23 | <BuildModes Count="1"> 24 | <Item1 Name="Default" Default="True"/> 25 | <SharedMatrixOptions Count="1"> 26 | <Item1 ID="103262766600" Modes="Default" Type="IDEMacro" MacroName="LCLWidgetType" Value="win32"/> 27 | </SharedMatrixOptions> 28 | </BuildModes> 29 | <PublishOptions> 30 | <Version Value="2"/> 31 | </PublishOptions> 32 | <RunParams> 33 | <local> 34 | <FormatVersion Value="1"/> 35 | </local> 36 | </RunParams> 37 | <RequiredPackages Count="1"> 38 | <Item1> 39 | <PackageName Value="LCL"/> 40 | </Item1> 41 | </RequiredPackages> 42 | <Units Count="3"> 43 | <Unit0> 44 | <Filename Value="fastdatetime_test.lpr"/> 45 | <IsPartOfProject Value="True"/> 46 | </Unit0> 47 | <Unit1> 48 | <Filename Value="unit_main.pas"/> 49 | <IsPartOfProject Value="True"/> 50 | <ComponentName Value="FormTest"/> 51 | <HasResources Value="True"/> 52 | <ResourceBaseClass Value="Form"/> 53 | </Unit1> 54 | <Unit2> 55 | <Filename Value="..\Tee.FastDateTime.pas"/> 56 | <IsPartOfProject Value="True"/> 57 | </Unit2> 58 | </Units> 59 | </ProjectOptions> 60 | <CompilerOptions> 61 | <Version Value="11"/> 62 | <PathDelim Value="\"/> 63 | <Target> 64 | <Filename Value="fastdatetime_test"/> 65 | </Target> 66 | <SearchPaths> 67 | <IncludeFiles Value="$(ProjOutDir)"/> 68 | <OtherUnitFiles Value="C:\Root\GitHub_Public\FastDateTime\"/> 69 | <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> 70 | </SearchPaths> 71 | <CodeGeneration> 72 | <Optimizations> 73 | <OptimizationLevel Value="3"/> 74 | </Optimizations> 75 | </CodeGeneration> 76 | <Linking> 77 | <Options> 78 | <Win32> 79 | <GraphicApplication Value="True"/> 80 | </Win32> 81 | </Options> 82 | </Linking> 83 | </CompilerOptions> 84 | <Debugging> 85 | <Exceptions Count="3"> 86 | <Item1> 87 | <Name Value="EAbort"/> 88 | </Item1> 89 | <Item2> 90 | <Name Value="ECodetoolError"/> 91 | </Item2> 92 | <Item3> 93 | <Name Value="EFOpenError"/> 94 | </Item3> 95 | </Exceptions> 96 | </Debugging> 97 | </CONFIG> 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 | <img width="895" height="747" alt="Screenshot from 2025-09-23 16-33-35" src="https://github.com/user-attachments/assets/9bec58f4-d0b8-4140-88a1-06d8d5eeabb6" /> 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 | --------------------------------------------------------------------------------