Delphi 格式化日期/浮动值 FormatDateTime 和 FormatFloat 用法

Delphi 格式化日期/浮动值 FormatDateTime 和 FormatFloat 用法

1、FormatDateTime 格式化日期

1.1 原型:

function FormatDateTime(const Format: string; DateTime: TDateTime): string;
begin
  DateTimeToString(Result, Format, DateTime);
end;

function FormatDateTime(const Format: string; DateTime: TDateTime;
  const FormatSettings: TFormatSettings): string;
begin
  DateTimeToString(Result, Format, DateTime, FormatSettings);
end;

1.2 Format 参数介绍:

  • c 以短时间格式显示时间,即全部是数字的表示
FormatdateTime('c',now);  //2020-11-6 9:55:40
  • d 对应于时间中的日期,日期是一位则显示一位,两位则显示两位
FormatdateTime('d',now);  //1~31
  • dd 和d的意义一样,但它始终是以两位来显示的
FormatdateTime('dd',now);  //01~31
  • ddd 显示的是星期几
FormatdateTime('ddd',now);  //星期一
    • dddd 和ddd显示的是一样的。 但上面两个如果在其他国家可能不一样。
  • ddddd(5个d) 以短时间格式显示年月日
FormatdateTime('ddddd',now);  //2020-11-06
  • dddddd(6个d) 以长时间格式显示年月日
FormatdateTime('dddddd',now);   //2020年11月6日
  • e/ee/eee/eeee 以相应的位数显示年
FormatdateTime('ee',now);    //04 (表示04年)
  • m/mm/mmm/mmmm 表示月
FormatdateTime('m',now);   //9
FormatdateTime('mm',now);  //09
FormatdateTime('mmm',now); //9月
FormatdateTime('mmmm',now); //9月
  • yy/yyyy 表示年
FormatdateTime('yy',now);  //20
FormatdateTime('yyyy',now);  //2020
  • h/hh, n/nn, s/ss ,z/zzz 分别表示小时、分、秒、毫秒
  • t 以短时间格式显示时间
FormatdateTime('t',now);  //10:17
  • tt 以长时间格式显示时间
FormatdateTime('tt',now);  //10:18:46
  • ampm 以长时间格式显示上午还是下午
FormatdateTime('ttampm',now);   //10:22:57上午

1.3 加普通的字符串

可以用双引号隔开那些特定义的字符,这样普通字符串中如果含特殊的字符就不会被显示为时间格式:

FormatdateTime('"today is" c',now);   //today is 2020-11-6 10:26:58

1.4 加"-"或"\"来分开日期:

FormatdateTime('"today is" yy-mm-dd',now);   //today is 20-11-06
FormatdateTime('"today is" yy\mm\dd',now);   //today is 20\11\06

1.5 用":"来分开时间

FormatdateTime('"today is" hh:nn:ss',now);   //today is 10:32:23 

1.6 Delphi 示例:

procedure FormatDateTimes;
var
  s: string;
begin
//FormatDateTime 的参数1是 String 格式指令, 参数2是 TDateTime 类型的时间
  s := FormatDateTime('c', Now); {返回: 2007-12-18 23:56:05}{指令 c 表示用短格式显示日期与时间}
  s := FormatDateTime('d', Now); {返回: 19}
  s := FormatDateTime('d', StrToDateTime('2008-1-1')); {返回: 1}{d 表示日期}
  s := FormatDateTime('dd', Now); {返回: 19}
  s := FormatDateTime('dd', StrToDateTime('2008-1-1')); {返回: 01}{dd 表示双位日期}
  s := FormatDateTime('ddd', Now); {返回: 星期三}
  s := FormatDateTime('dddd', Now); {返回: 星期三}{ddd 与 dddd 表示星期; 可能对不同的语种会有区别}
  s := FormatDateTime('ddddd', Now); {返回: 2007-12-19}{ddddd 五个 d 表示短格式日期}
  s := FormatDateTime('dddddd', Now); {返回: 2007年12月19日}{dddddd 六个 d 表示长格式日期}
  s := FormatDateTime('e', Now); {返回: 7}{e 表示年, 1位}
  s := FormatDateTime('ee', Now); {返回: 07}{ee 表示年, 2位}
  s := FormatDateTime('eee', Now); {返回: 2007}
  s := FormatDateTime('eeee', Now); {返回: 2007}{eee 与 eeee 返回4位数年}
  s := FormatDateTime('m', Now); {返回: 12}{m 表示月, 1位}
  s := FormatDateTime('mm', StrToDateTime('2008-1-1')); {返回: 01}{mm 表示月, 2位}
  s := FormatDateTime('mmm', Now); {返回: 十二月}
  s := FormatDateTime('mmmm', Now); {返回: 十二月}{mmm 与 mmmm 表示长格式月}
  s := FormatDateTime('y', Now); {返回: 07}
  s := FormatDateTime('yy', Now); {返回: 07}
  s := FormatDateTime('yyy', Now); {返回: 2007}
  s := FormatDateTime('yyyy', Now); {返回: 2007}{y yy yyy yyyy 表示年; 和 e 略有不同}
  s := FormatDateTime('t', Now); {返回: 0:21}
  s := FormatDateTime('tt', Now); {返回: 0:22:13}{t tt 表示时间}
  s := FormatDateTime('ampm', Now); {返回: 上午}
  s := FormatDateTime('tampm', Now); {返回: 0:24 上午}{ampm 表示上午、下午}
  s := FormatDateTime('h', StrToDateTime('2007-12-30 9:58:06')); {返回: 9}
  s := FormatDateTime('hh', StrToDateTime('2007-12-30 9:58:06')); {返回: 09}{h hh 表示时}
  s := FormatDateTime('n', StrToDateTime('2007-12-30 9:58:06')); {返回: 58}
  s := FormatDateTime('nn', StrToDateTime('2007-12-30 9:58:06')); {返回: 58}{n nn 表示分}
  s := FormatDateTime('s', StrToDateTime('2007-12-30 9:58:06')); {返回: 6}
  s := FormatDateTime('ss', StrToDateTime('2007-12-30 9:58:06')); {返回: 06}{s ss 表示秒}
  s := FormatDateTime('z', Now); {返回: 24}
  s := FormatDateTime('zz', Now); {返回: 524}
  s := FormatDateTime('zzz', Now); {返回: 524}{z zz zzz 表示毫秒}
  s := FormatDateTime('yy\mm\dd', Now); {返回: 07\12\19}
  s := FormatDateTime('yy/mm/dd', Now); {返回: 07-12-19}
  s := FormatDateTime('yy-mm-dd', Now); {返回: 07-12-19}
  s := FormatDateTime('yy*mm*dd', Now); {返回: 07*12*19}{使用分隔符, - 是默认的, / 是与 - 等效的, 假如我非要用 / 显示呢?}
  s := FormatDateTime('yy"/"mm"/"dd', Now); {返回: 07/12/19}
  s := FormatDateTime('"当前时间是: "yyyy-m-d h:n:s:zz', Now); {返回: 当前时间是: 2007-12-19 0:47:16:576}{混入的字符串要包含在双引号中}
  ShowMessage(s);
end;

  

2、FormatFloat 格式化浮动值

2.1 原型:

function FormatFloat(const Format: string; Value: Extended): string;
var
  Buffer: array[0..255] of Char;
begin
  if Length(Format) > SizeOf(Buffer) - 32 then ConvertError(@SFormatTooLong);
  SetString(Result, Buffer, FloatToTextFmt(Buffer, Value, fvExtended,
    PChar(Format)));
end;

function FormatFloat(const Format: string; Value: Extended;
  const FormatSettings: TFormatSettings): string;
var
  Buffer: array[0..255] of Char;
begin
  if Length(Format) > SizeOf(Buffer) - 32 then ConvertError(@SFormatTooLong);
  SetString(Result, Buffer, FloatToTextFmt(Buffer, Value, fvExtended,
    PChar(Format), FormatSettings));
end;

Extended类型是所有浮点值中表示范围最大的,如果传入该方法的参数比如Double或者其他,则可以保存不会超出范围。

2.2 参数:

  • 0 指定相应的位数的指令。
FormatFloat('000.000',33.33);   //033.330
    • 注意一点,如果整数部分的0的个数小于Value参数中整数的位数,则没有效果如:
FormatFloat('0.00',33.33);   //33.33
    • 如果小数部分的0小于Value中小数的倍数,则会截去相应的小数和位数如:
FormatFloat('0.0',33.33);   //33.3
    • 在整数0中指定逗号(财务逗号分隔),这个整数位数必须大于3个,才会有逗号出句
FormatFloat('0,000.0',3333.33);  //3,333.3
    • 这样也可以
FormatFloat('000,0.0',3333.33);   //3,333.3
    • 它的规律,#和0的用法基本一样
FormatFloat('##.##',33.33);   //33.00
  • E 科学表示法
FormatFloat('0.00E+00',3333.33);     //3.33E+03
FormatFloat('0000.00E+00',3333.33);  //3333.33E+00
FormatFloat('00.0E+0',3333.33);     //33.3E+3
    • 靠E右边的0来支配

创建时间:2015.09.12  更新时间:2020.11.06