[fpc-devel] Add {$I %DATETIME%}

Denis Kozlov dezlov at gmail.com
Fri Jan 15 22:23:59 CET 2016


Hello,

I'm proposing addition of {$I %DATETIME%} directive. A trivial patch is 
attached.

The following will be possible:
const
   T = {$I %DATETIME%};
begin
   WriteLn(DateTimeToStr(T));
end.

Benefits of this directive:
1) Access to build date/time in native TDateTime format. Existing {$I 
%DATE%} and {$I %TIME%} are inserted as strings in predefined format, 
parsing is required to extract date/time components or to reformat it.
2) Atomic access to build date/time. Use of {$I %DATE%} and {$I %TIME%} 
can have undesired effect if {$I %DATE%} is executed at 2016-01-15 
23:59:59.999 and 1 ms later {$I %TIME%} is executed at 2016-01-16 
00:00:00.000. Resulting combination of two directive is 2016-01-15 
00:00:00, a day out of date.
3) Search and replace of build date/time is no longer a trivial text 
editor operation.

The following ticket can then be resolved:
http://bugs.freepascal.org/view.php?id=26472

Denis
-------------- next part --------------
Index: compiler/globals.pas
===================================================================
--- compiler/globals.pas	(revision 32893)
+++ compiler/globals.pas	(working copy)
@@ -509,6 +509,7 @@
 
     function getdatestr:string;
     function gettimestr:string;
+    function getdatetimerawstr:string;
     function filetimestring( t : longint) : string;
     function getrealtime : real;
 
@@ -770,6 +771,10 @@
         getdatestr:=L0(st.Year)+'/'+L0(st.Month)+'/'+L0(st.Day);
       end;
 
+   function getdatetimerawstr:string;
+   begin
+     getdatetimerawstr := FloatToStr(Now);
+   end;
 
    function  filetimestring( t : longint) : string;
    {
Index: compiler/scanner.pas
===================================================================
--- compiler/scanner.pas	(revision 32893)
+++ compiler/scanner.pas	(working copy)
@@ -2427,6 +2427,11 @@
                hs:=gettimestr;
              'DATE':
                hs:=getdatestr;
+             'DATETIME':
+               begin
+                 hs:=getdatetimerawstr;
+                 macroIsString:=false;
+               end;
              'FILE':
                hs:=current_module.sourcefiles.get_file_name(current_filepos.fileindex);
              'LINE':


More information about the fpc-devel mailing list