[fpc-pascal] date formating dificulty
waldo kitty
wkitty42 at windstream.net
Wed Nov 19 22:31:52 CET 2014
On 11/19/2014 9:17 AM, Philippe wrote:
>> I still don't know how to use at the same time formatStr and FormatSettings in FormatDateTime.
i'm not sure i understand your delima... perhaps you are trying to determine how
the FormatSettings work and how you can force the same output format on
different OSes? i found the following (slightly modified by me for CLI) delphi
code that might help... the original code resides at
http://www.delphibasics.co.uk/RTL.asp?Name=FormatDateTime
in the code, we output the results of the various FormatDateTime usages... then
we change the values of the date and time formatting variables and run the same
outputs again...
>> I´ll like very much to find a tutorial or some example about the good
>> practice to manage dates and be sure it will do the same thing on different
>> machines ....
in some cases, you can fall back to delphi tutorials... it can be troublesome in
some cases where things are slightly different between FPC/Lazarus and Delphi...
the biggest problem i personally run into is that so much example code is GUI
oriented and i still code for CLI...
anyway, here is the output of the following code...
*NOTE:* i think we've found a bug in (fpc?) trunk or perhaps it is just an
unexpected side effect due to the system's settings... the day and month are
reversed in the first separators line... as the comments in the code note, we're
trying to work with 5 Jun 49... but this output was done on a US winwhatever
(vista) system... it might be getting in the way by forcing mm/dd/yy format from
the dd/mm/yy work string... someone else will have to speak to that as i would
expect it to do the same in the second output set but it doesn't...
System formatting:
Working with date string = 05/06/49 01:02:03.004
Separators dd/mm/yy hh:nn:ss = 06/05/49 01:02:03
ShortMonths mmm = May
LongMonths mmmm = May
ShortDays ddd = Thu
LongDays dddd = Thursday
ShortDate ddddd = 5/6/2049
LongDate dddddd = Thursday, May 06, 2049
AMPM hhampm = 01AM
ShortTime t = 1:02
LongTime tt = 1:02:03
2DigitCentury dd/mm/yyyy = 06/05/2049
Modified formatting:
Working with date string = 05-06-49 01_02_03.004
Separators dd/mm/yy hh:nn:ss = 05-06-49 01_02_03
ShortMonths mmm = JUN
LongMonths mmmm = JUNE
ShortDays ddd = SUN
LongDays dddd = SUNDAY
ShortDate ddddd = 05-JUN-49
LongDate dddddd = SUNDAY 05 of JUNE of 1949
AMPM hhampm = 01morning
ShortTime t = 01_02_03
LongTime tt = 01 _ 02 _ 03 . 004
2DigitCentury dd/mm/yyyy = 05-06-1949
===== snip =====
program DTFormatting;
uses SysUtils;
var
DateStr : String;
myDate : TDateTime;
begin
// Set up our TDateTime variable with a full date and time :
// 5th of June 2049 at 01:02:03.004 (.004 milli-seconds)
//
// Note that 49 is treated as 2049 as follows :
// TwoDigitYearCenturyWindow => 50
// Current year => 2008 (at time of writing)
// Subtract TwoDigitYearCenturyWindow => 1958
// 2 digit year to be converted => 49
// Compare with the last 2 digits of 1958 => Less
// So the year is in the next century => 2049
// (58 would be converted to 1958)
WriteLn('System formatting:');
DateStr := '05/06/49 01:02:03.004';
WriteLn(' Working with date string = '+DateStr);
myDate := StrToDateTime(DateStr);
// Demonstrate default locale settings
// Use the DateSeparator and TimeSeparator values
WriteLn(' Separators dd/mm/yy hh:nn:ss = '+FormatDateTime('dd/mm/yy
hh:nn:ss', myDate));
// Use ShortMonthNames
WriteLn(' ShortMonths mmm = '+FormatDateTime('mmm', myDate));
// Use LongMonthNames
WriteLn(' LongMonths mmmm = '+FormatDateTime('mmmm', myDate));
// Use ShortDayNames
WriteLn(' ShortDays ddd = '+FormatDateTime('ddd', myDate));
// Use LongDayNames
WriteLn(' LongDays dddd = '+FormatDateTime('dddd', myDate));
// Use the ShortDateFormat string
WriteLn(' ShortDate ddddd = '+FormatDateTime('ddddd', myDate));
// Use the LongDateFormat string
WriteLn(' LongDate dddddd = '+FormatDateTime('dddddd', myDate));
// Use the TimeAmString
WriteLn(' AMPM hhampm = '+FormatDateTime('hhampm', myDate));
// Use the ShortTimeFormat string
WriteLn(' ShortTime t = '+FormatDateTime('t', myDate));
// Use the LongTimeFormat string
WriteLn(' LongTime tt = '+FormatDateTime('tt', myDate));
// Use the TwoDigitCenturyWindow
WriteLn(' 2DigitCentury dd/mm/yyyy = '+FormatDateTime('dd/mm/yyyy',
myDate));
WriteLn('');
WriteLn('Modified formatting:');
// Now change the defaults
DefaultFormatSettings.DateSeparator := '-';
DefaultFormatSettings.TimeSeparator := '_';
DefaultFormatSettings.ShortDateFormat := 'dd/mmm/yy';
DefaultFormatSettings.LongDateFormat := 'dddd dd "of" mmmm "of" yyyy';
DefaultFormatSettings.TimeAMString := 'morning';
DefaultFormatSettings.TimePMString := 'afternoon';
DefaultFormatSettings.ShortTimeFormat := 'hh:nn:ss';
DefaultFormatSettings.LongTimeFormat := 'hh : nn : ss . zzz';
DefaultFormatSettings.ShortMonthNames[6] := 'JUN';
DefaultFormatSettings.LongMonthNames[6] := 'JUNE';
DefaultFormatSettings.ShortDayNames[1] := 'SUN';
DefaultFormatSettings.LongDayNames[1] := 'SUNDAY';
DefaultFormatSettings.TwoDigitYearCenturyWindow := 75; // This means 49 is
treated as 1949
// Set up our TDateTime variable with the same value as before
// **except that we must use the new date and time separators**
// The TwoDigitYearCenturyWindow variable only takes effect here
DateStr := '05-06-49 01_02_03.004';
WriteLn(' Working with date string = '+DateStr);
myDate := StrToDateTime(DateStr);
// Use the DateSeparator and TimeSeparator values
WriteLn(' Separators dd/mm/yy hh:nn:ss = '+FormatDateTime('dd/mm/yy
hh:nn:ss', myDate));
// Use ShortMonthNames
WriteLn(' ShortMonths mmm = '+FormatDateTime('mmm', myDate));
// Use LongMonthNames
WriteLn(' LongMonths mmmm = '+FormatDateTime('mmmm', myDate));
// Use ShortDayNames
WriteLn(' ShortDays ddd = '+FormatDateTime('ddd', myDate));
// Use LongDayNames
WriteLn(' LongDays dddd = '+FormatDateTime('dddd', myDate));
// Use the ShortDateFormat string
WriteLn(' ShortDate ddddd = '+FormatDateTime('ddddd', myDate));
// Use the LongDateFormat string
WriteLn(' LongDate dddddd = '+FormatDateTime('dddddd', myDate));
// Use the TimeAmString
WriteLn(' AMPM hhampm = '+FormatDateTime('hhampm', myDate));
// Use the ShortTimeFormat string
WriteLn(' ShortTime t = '+FormatDateTime('t', myDate));
// Use the LongTimeFormat string
WriteLn(' LongTime tt = '+FormatDateTime('tt', myDate));
// Use the TwoDigitCenturyWindow
WriteLn(' 2DigitCentury dd/mm/yyyy = '+FormatDateTime('dd/mm/yyyy',
myDate));
end.
===== snip =====
--
NOTE: No off-list assistance is given without prior approval.
Please *keep mailing list traffic on the list* unless
private contact is specifically requested and granted.
More information about the fpc-pascal
mailing list