summaryrefslogtreecommitdiff
path: root/UCoreUtils.pas
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@users.sourceforge.net>2008-06-09 23:52:56 +0200
committerTomas Bzatek <tbzatek@users.sourceforge.net>2008-06-09 23:52:56 +0200
commit47735c3d73cc677e519cd33b58232c97729596fa (patch)
tree32b96f0388721dd63668cb159d05e6c934536268 /UCoreUtils.pas
parentf9c7a5f62f96fab9ce5e3d2c205bc9da3046c4d4 (diff)
downloadtuxcmd-47735c3d73cc677e519cd33b58232c97729596fa.tar.xz
Date/time string formatting revisionv0.6.40
Added ability to set custom date/time format
Diffstat (limited to 'UCoreUtils.pas')
-rw-r--r--UCoreUtils.pas87
1 files changed, 86 insertions, 1 deletions
diff --git a/UCoreUtils.pas b/UCoreUtils.pas
index 31c72b1..3290019 100644
--- a/UCoreUtils.pas
+++ b/UCoreUtils.pas
@@ -24,7 +24,7 @@ unit UCoreUtils;
interface
-uses gdk2pixbuf, gtk2, gdk2, glib2, SysUtils, Classes, Libc, GTKControls, GTKStdCtrls, GTKClasses, UEngines;
+uses gdk2pixbuf, gtk2, gdk2, glib2, SysUtils, Classes, Libc, UGlibC_compat, GTKControls, GTKStdCtrls, GTKClasses, UEngines;
type
PIntArray = ^TIntArray;
@@ -58,6 +58,7 @@ function GetSignalString(SignalNo: integer): string;
function UnixTimeToTDateTime(UnixTime: Int64): TDateTime;
function FormatSize(Value: Int64; Base: integer; OverrideSizeFormat: integer = -1): string;
+function FormatDate(Value: TTimeT; const FormatTime, FormatDate: boolean; OverrideTimeFormat: integer = -1; OverrideDateFormat: integer = -1; OverrideDateTimeFormat: integer = -1): string;
function AttrToStr(const Mode: Cardinal; IncludeFileType: boolean = True): string;
function AttrToOctal(const Mode: Cardinal): integer;
@@ -269,6 +270,90 @@ begin
end;
(********************************************************************************************************************************)
+function FormatDate(Value: TTimeT; const FormatTime, FormatDate: boolean; OverrideTimeFormat: integer = -1; OverrideDateFormat: integer = -1; OverrideDateTimeFormat: integer = -1): string;
+var DateString, TimeString: string;
+ DateFormat, TimeFormat: string;
+ df, tf, dtf: integer;
+ time_tm: Ptm;
+ Buf: PChar;
+ placed: integer;
+begin
+ DateString := '';
+ TimeString := '';
+ DateFormat := '';
+ TimeFormat := '';
+ Result := '';
+ if OverrideDateFormat >= 0 then df := OverrideDateFormat
+ else df := ConfDateFormat;
+ if OverrideTimeFormat >= 0 then tf := OverrideTimeFormat
+ else tf := ConfTimeFormat;
+ if OverrideDateTimeFormat >= 0 then dtf := OverrideDateTimeFormat
+ else dtf := ConfDateTimeFormat;
+ time_tm := localtime(@Value);
+
+ if FormatDate then begin
+ case df of
+ 0: DateFormat := '%x'; // System format
+ 1: DateFormat := '%Y-%m-%d'; // 2008-06-24
+ 2: DateFormat := '%Y/%m/%d'; // 2008/06/24
+ 3: DateFormat := '%d.%m.%Y'; // 24.06.2008
+ 4: DateFormat := '%d.%m.%y'; // 24.06.08
+ 5: DateFormat := '%d-%m-%Y'; // 24-06-2008
+ 6: DateFormat := '%d/%m/%Y'; // 24/06/2008
+ 7: DateFormat := '%m-%d-%Y'; // 06-24-2008
+ 8: DateFormat := '%m/%d/%Y'; // 06/24/2008
+ 9: DateFormat := '%d-%m-%y'; // 24-06-08
+ 10: DateFormat := '%d/%m/%y'; // 24/06/08
+ 11: DateFormat := '%m-%d-%y'; // 06-24-08
+ 12: DateFormat := '%m/%d/%y'; // 06/24/08
+ 13: DateFormat := '%y-%m-%d'; // 08-06-24
+ 14: DateFormat := '%y/%m/%d'; // 08/06/24
+ else DateFormat := ConfCustomDateFormat; // Custom date format
+ end;
+ Buf := malloc(255);
+ memset(Buf, 0, 255);
+ placed := strftime(Buf, 254, PChar(DateFormat), time_tm);
+ if placed <= 0 then DebugMsg(['FormatDate: error converting date. The result will be unpredictable.']);
+ DateString := String(StrToUTF8(Buf));
+ Libc.free(Buf);
+ end;
+
+ if FormatTime then begin
+ case tf of
+ 0: TimeFormat := '%X'; // System format
+ 1: TimeFormat := '%I:%M %P'; // 01:11 pm
+ 2: TimeFormat := '%l:%M %P'; // 1:11 pm
+ 3: TimeFormat := '%I:%M:%S %P'; // 01:11:11 pm
+ 4: TimeFormat := '%l:%M:%S %P'; // 1:11:11 pm
+ 5: TimeFormat := '%I:%M %p'; // 01:11 PM
+ 6: TimeFormat := '%l:%M %p'; // 1:11 PM
+ 7: TimeFormat := '%I:%M:%S %p'; // 01:11:11 PM
+ 8: TimeFormat := '%l:%M:%S %p'; // 1:11:11 PM
+ 9: TimeFormat := '%k:%M'; // 13:11
+ 10: TimeFormat := '%k:%M:%S'; // 13:11:11
+ 11: TimeFormat := '%H%M'; // 1311
+ else TimeFormat := ConfCustomTimeFormat; // Custom Time format
+ end;
+ Buf := malloc(255);
+ memset(Buf, 0, 255);
+ placed := strftime(Buf, 254, PChar(TimeFormat), time_tm);
+ if placed <= 0 then DebugMsg(['FormatDate: error converting time. The result will be unpredictable.']);
+ TimeString := String(StrToUTF8(Buf));
+ Libc.free(Buf);
+ end;
+
+ if FormatDate and FormatTime then begin
+ case dtf of
+ 0: Result := Format('%s %s', [DateString, TimeString]);
+ else Result := Format('%s %s', [TimeString, DateString]);
+ end;
+ end else
+ if FormatTime then Result := TimeString else
+ if FormatDate then Result := DateString;
+end;
+
+
+(********************************************************************************************************************************)
function AttrToStr(const Mode: Cardinal; IncludeFileType: boolean = True): string;
begin
if IncludeFileType then begin