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
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':
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to