很多时候要用到相差多少天,多少周,多少秒,查了一下资料,整理如下:
首先 uses dateutils;
先自己做了个实例,相关代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,
Dialogs, StdCtrls, dateutils;
type
TForm1 = class(TForm)
Button1:
TButton;
Memo1: TMemo;
procedure Button1Click(Sender:
TObject);
private
{ Private declarations }
public
{ Public
declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender:
TObject);
var
sd,nd:Tdatetime;
randid:string;
begin
sd :=
StrtoDatetime('1981-08-08 00:00:00');
nd :=
now;
memo1.Clear;
memo1.Lines.Add('开始测试时间差:');
memo1.Lines.Add('起始时间:1981-08-08
00:00:00');
memo1.Lines.Add('终止时间:'+datetimetostr(nd));
memo1.Lines.Add('年:'+inttostr(YearsBetween(sd,nd)));
memo1.Lines.Add('月:'+inttostr(MonthsBetween(sd,nd)));
memo1.Lines.Add('周:'+inttostr(WeeksBetween(sd,nd)));
memo1.Lines.Add('日:'+inttostr(DaysBetween(sd,nd)));
memo1.Lines.Add('时:'+inttostr(HoursBetween(sd,nd)));
memo1.Lines.Add('分:'+inttostr(MinutesBetween(sd,nd)));
memo1.Lines.Add('秒:'+inttostr(SecondsBetween(sd,nd)));
memo1.Lines.Add(#13);
memo1.Lines.Add('以秒差为例生成随机数:');
randid
:=
inttostr(SecondsBetween(sd,nd))+inttostr(random(9))+inttostr(random(9))+inttostr(random(9))+inttostr(random(9));//呵呵,很笨的方法。
memo1.Lines.Add(randid);
end;
end.
==================
object Form1: TForm1
Left = 571
Top =
224
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle =
bsSingle
Caption = #26102#38388#24046#20989#25968
ClientHeight =
249
ClientWidth = 201
Color = clBtnFace
Font.Charset =
DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name =
'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch =
96
TextHeight = 13
object Button1: TButton
Left = 8
Top =
8
Width = 185
Height = 25
Caption =
#28436#31034#26102#38388#24046#20989#25968
TabOrder = 0
OnClick =
Button1Click
end
object Memo1: TMemo
Left = 8
Top =
40
Width = 185
Height = 201
TabOrder =
1
end
end
相关函数如下:
{ Range query functions }
function YearsBetween(const ANow, AThen: TDateTime):
Integer;
function MonthsBetween(const ANow, AThen: TDateTime):
Integer;
function WeeksBetween(const ANow, AThen: TDateTime):
Integer;
function DaysBetween(const ANow, AThen: TDateTime):
Integer;
function HoursBetween(const ANow, AThen: TDateTime):
Int64;
function MinutesBetween(const ANow, AThen: TDateTime):
Int64;
function SecondsBetween(const ANow, AThen: TDateTime):
Int64;
function MilliSecondsBetween(const ANow, AThen: TDateTime):
Int64;
{ Range spanning functions }
{ YearSpan and MonthSpan
are approximates, not exact but pretty darn close }
function YearSpan(const
ANow, AThen: TDateTime): Double;
function MonthSpan(const ANow, AThen:
TDateTime): Double;
function WeekSpan(const ANow, AThen: TDateTime):
Double;
function DaySpan(const ANow, AThen: TDateTime): Double;
function
HourSpan(const ANow, AThen: TDateTime): Double;
function MinuteSpan(const
ANow, AThen: TDateTime): Double;
function SecondSpan(const ANow, AThen:
TDateTime): Double;
function MilliSecondSpan(const ANow, AThen: TDateTime):
Double;
找到一篇关于时间函数应用的学习笔记,备份一下。
TDateTime是一个比较常用的类型,用于表达日期时间类型的数据。但是,刚刚接触delphi的新手在使用这个类型的时候往往会不知所措,不知道该怎样使用才能得到自己想要的结果。这里说说我在使用过程中的一点心得,其中大部分的内容是来自于delphi帮助,所以如果看了这篇文章对TDateTime还有什么不清楚的可以去看看Delphi的帮助。另外在这篇文章里我也会告诉大家我使用帮助的心得,这对老手或许是班门弄斧但是对于新手我自认为还是很有帮助的。
一、关于TDateTime
1、TDateTime的基本概念:
根据Delphi的帮助里所说的,TDateTime是date和time例程用来存放date和time变量的,在delphi里TDateTime类型本质上是Double类型的,其中整数位用于表达从1899年12月30日到现在所已经过去的天数,小数部分用于表示当天已经流逝的分数值——有些不明白吧,举个例子:上午6点小数部分就是0.25、中午12点小数部分就是0.5依此类推。
2、常用函数和过程
2.1
Date函数
function
Date:
TDateTime;
返回当前的日期,实际类型是TDateTime,也就是小数部分为0的DateTime值,小数部分为0代表什么意思呢?根据TDateTime的概念我们知道这代表午夜也就是0点。
2.2
DateToStr
函数的形式:function
DateToStr(Date: TDateTime):
string;
返回值是个字符串,很有用吧。不过,别高兴的太早,如果你用DateToStr(DateTimePicker.Date),你会发现返回的字符串可能是“04-22-03”,这是为什么呢?这是因为delphi内部有一些系统变量用来定义数字、货币、日期的格式,这些变量delphi称为Currency
and date/time formatting
variables,有23个。我也没有完全看懂,这里讲几个我搞明白的说说。
var
ThousandSeparator:
Char;
千分位的符号,一般都是西文的逗号“,”,默认值存放在LOCALE_STHOUSAND变量中(位于windows单元)
var
DecimalSeparator:
Char;
小数点的符号,一般都是西文的句号“.”,默认值存放在变量LOCALE_SDECIMAL中
var
CurrencyDecimals:
Byte;
小数点后面保留的位数,一般是2位,默认值存放在变量LOCALE_ICURRDIGITS中
var
DateSeparator:
Char;
日期的分隔符号,一般使用“-”或“.”,默认值为“-”,默认值存放在变量LOCATE_SDATE中
var
ShortDateFormat:
string;
短日期格式,一般是“yyyy.mm.dd”,默认值存放在变量LOCALE_SSHORTDATE中
var
LongDateFormat:
string;
长日期格式,一般是“yyyy.mm.dd”,默认值存放在变量LOCALE_SLONGDATE中
var
TimeSeparator:
Char;
时间的分隔符,一般是西文的分号“:”,默认值就是这个,默认值存放在变量
LOCALE_STIME中
var
TimeAMString:
string;
表示上午的字符串,默认为“AM”,默认值存放在变量LOCALE_S1159中
var
TimePMString:
string;
表示下午的字符串,默认为“PM”,默认值存放在变量LOCALE_S2359中
var
ShortTimeFormat:
string;
短时间格式,默认值存放在变量LOCALE_ITIME
LOCALE_ITLZERO中