dateprocess.pas
来自「delphi框架可以学习, 写的很好的」· PAS 代码 · 共 1,406 行 · 第 1/3 页
PAS
1,406 行
unit DateProcess;
interface
const
DayOfWeekStrings: array [1..7] of String = ('SUNDAY', 'MONDAY', 'TUESDAY',
'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY');
MonthStrings: array [1..12] of String = ('JANUARY', 'FEBRUARY', 'MARCH',
'APRIL','MAY', 'JUNE', 'JULY', 'AUGUST', 'SEPTEMBER', 'OCTOBER',
'NOVEMBER', 'DECEMBER');
DayOfCWeekStrings: array [1..7] of String= ('星期日','星期一',
'星期二','星期三','星期四','星期五','星期六');
MonthCStrings: array [1..12] of String = ('一月', '二月', '三月','四月','五月',
'六月', '七月', '八月', '九月', '十月','十一月', '十二月');
const
OneDay = 1.0;
OneHour = OneDay / 24.0;
OneMinute = OneHour / 60.0;
OneSecond = OneMinute / 60.0;
OneMillisecond = OneSecond / 1000.0;
//--- 年度函数 ---
//检查日期值是否是润年
function IsLeapYear (Year: Word): Boolean;
//传回日期值年度的第一天
function GetFirstDayOfYear (const Year: Word): TDateTime;
//传回日期值年度的最后一天
function GetLastDayOfYear (const Year: Word): TDateTime;
//传回日期值年度的第一星期天的日期
function GetFirstSundayOfYear (const Year: Word): TDateTime;
//传回西洋日期的格式MM/DD/YY
function GetMDY (const DT: TDateTime): String;
//--- 日期型的转换 ---
//日期转成字符串
//如果是错误将传一空值
function Date2Str (const DT: TDateTime): String;
//传回日期值的日期
function GetDay (const DT: TDateTime): Word;
//:传回日期值的月份
function GetMonth (const DT: TDateTime): Word;
//: 传回日期值的年份
function GetYear (const DT: TDateTime): Word;
//:将日期的值取出时间的值
function Time2Hr (const DT: TDateTime): Word;
//:将日期的值取出分锺的值
function Time2Min (const DT: TDateTime): Word;
//:将日期的值取出秒数的值
function Time2Sec (const DT: TDateTime): Word;
//:将日期的值取出微秒的值
function Time2MSec (const DT: TDateTime): Word;
//传回目前的年度
function ThisYear: Word;
//传回目前的月份
function ThisMonth: Word;
//传回目前的日期
function ThisDay: Word;
//传回目前的时间
function ThisHr: Word;
//传回目前的分锺
function ThisMin: Word;
//传回目前的秒数
function ThisSec: Word;
//将英文的星期转成整数值
//例如EDOWToInt(''SUNDAY')=1
function EDOWToInt (const DOW: string): Integer;
//将英文的月份转成整数值的月
//例如EMonthToInt('JANUARY')=1
function EMonthToInt (const Month: string): Integer;
function GetCMonth(const DT: TDateTime): String;
//传回中文显示的月份
function GetC_Today: string;
//传回中国的日期
//例如: GetC_Today传回值为89/08/11
Function TransC_DateToE_Date(Const CDT :String) :TDateTime;
//将民国的年月日转换为公元的YYYY/MM/DD
//2001/02/02加入 例如:TransC_DateToE_Date('90年2月1日')传回值是2001/2/1
function GetCWeek(const DT: TDateTime): String;
//传回值为中文显示的星期 例如:GETCWeek(2000/08/31)=星期四
function GetLastDayForMonth(const DT: TDateTime):TDateTime;
//传回本月的最后一天
function GetFirstDayForMonth (const DT :TDateTime): TDateTime;
//取得月份的第一天
function GetLastDayForPeriorMonth(const DT: TDateTime):TDateTime;
//传回上个月的最后一天
function GetFirstDayForPeriorMonth (const DT :TDateTime): TDateTime;
//取得上个月份的第一天
function ROCDATE(DD:TDATETIME;P:integer):string;
{转换某日期为民国0YYMMDD 型式字符串,例如:ROCDATE(Now,0)='900304' }
{P=0 不加'年'+'月'+'日'}
{P=1 加'年'+'月'+'日'}
{------------------- 日期和时间的计算函数------------------}
//传回两个日期相减值的分锺数
function MinutesApart (const DT1, DT2: TDateTime): Word;
//调整年度的时间
//例如AdjustDateYear(Now,1998)传回值为'1998/02/25'
function AdjustDateYear (const D: TDateTime; const Year: Word): TDateTime;
//增加n个分钟的时间
function AddMins (const DT: TDateTime; const Mins: Extended): TDateTime;
//增加n个小时的时间
function AddHrs (const DT: TDateTime; const Hrs: Extended): TDateTime;
//可将日期加上欲增加的天数为得到的值 例如:AddDays(2000/08/31,10)=2000/09/10
function AddDays (const DT: TDateTime; const Days: Extended): TDateTime;
//增加n周的时间
//例如:AddWeeks(2001/01/21,2)传回值为'2001/02/4'
function AddWeeks (const DT: TDateTime; const Weeks: Extended): TDateTime;
//增加n个月的时间
function AddMonths (const DT: TDateTime; const Months: Extended): TDateTime;
//增加n个年的时间
function AddYrs (const DT: TDateTime; const Yrs: Extended): TDateTime;
//传回向前算的N个分锺
function SubtractMins (const DT: TDateTime; const Mins: Extended): TDateTime;
//传回向前算的N个小时
function SubtractHrs (const DT: TDateTime; const Hrs: Extended): TDateTime;
//传回向前算的N个天
function SubtractDays (const DT: TDateTime; const Days: Extended): TDateTime;
//传回向前算的N个周
function SubtractWeeks (const DT: TDateTime; const Weeks: Extended): TDateTime;
//传回向前算的N个月,例如:SubtractMonths('2000/11/21',3)传回'2000/08/22'
function SubtractMonths (const DT: TDateTime; const Months: Extended): TDateTime;
//传回日期值的本月份的最后一天
function GetLastDayOfMonth (const DT: TDateTime): TDateTime;
//传回日期值的本月份的第一天
function GetFirstDayOfMonth (const DT: TDateTime): TDateTime;
//传回年度第一周的第一个星期天的日期
function StartOfWeek (const DT: TDateTime): TDateTime;
//传回年度最后一周的最后一个星期天的日期
function EndOfWeek (const DT: TDateTime): TDateTime;
//将秒数转换为时分秒
function Hrs_Min_Sec (Secs: Extended): string;
//: 比较两的日期值是否是同月如果是为真
function DatesInSameMonth (const DT1, DT2: TDateTime): Boolean;
//: 比较两的日期值是否是同年如果是为真
function DatesInSameYear (const DT1, DT2: TDateTime): Boolean;
//: 比较两的日期值是否是同年和同月如果是为真
function DatesInSameMonthYear (const DT1, DT2: TDateTime): Boolean;
//:传回两个日期相减值的天数
//例如:DaysApart是DT2减DT1
function DaysApart (const DT1, DT2: TDateTime): LongInt;
//传回两个日期相减值的周数
//例如:ExactWeeksApart是DT2减DT1
function ExactWeeksApart (const DT1, DT2: TDateTime): Extended;
//传回两个日期相减值的周数
//例如:ExactWeeksApart是DT2减DT1
function WeeksApart (const DT1, DT2: TDateTime): LongInt;
//: 如果是真表示日期为润年
function DateIsLeapYear (const DT: TDateTime): Boolean;
//: 传回日期值本月份的天数
// DaysThisMonth(Now)= 31,三月有31天
function DaysThisMonth (const DT: TDateTime): Byte;
//: 传回日期值的本年度的月份中的日数,还有几天
//DaysLeftInMonth('2001/04/28')传回值2
function DaysLeftInMonth (const DT: TDateTime): Byte;
//: 传回日期值的本年度的月份中的日数,还有几天
function DaysInMonth (const DT: TDateTime): Byte;
//: 传回日期值的本年度的天数,如果是润年有366天;不是就有365天
function DaysInYear (const DT: TDateTime): Word;
//: 传回日期值中本年度已过了几天
//例如:DayOfYear(now)=119
function DayOfYear (const DT: TDateTime): Word;
//: 传回今天的日期在本年度过了几天
//例如: ThisDayOfYear=119
function ThisDayOfYear: Word;
//:传回今年度还有几天
function DaysLeftInYear (const DT: TDateTime): Word;
//传回日期值的季别
//例如:WhichQuarter(now)=2
function WhichQuarter (const DT: TDateTime): Byte;
//传回年龄,依现在其日期减出生的日期
function AgeAtDate (const DOB, DT: TDateTime): Integer;
//传回年龄,依现在其日期减出生的日期
function AgeNow (const DOB: TDateTime): Integer;
//传回年龄,依现在其日期减出生的日期
function AgeAtDateInMonths (const DOB, DT: TDateTime): Integer;
//传回年龄,依现在其日期减出生的日期
function AgeNowInMonths (const DOB: TDateTime): Integer;
//传回日期值已存活的周数
//例如 AgeAtDateInWeeks('1963/06/24',Now)=1975
function AgeAtDateInWeeks (const DOB, DT: TDateTime): Integer;
//传回日期值已存活的周数,不同的是此函数不用第二个参数是用上一个函数完成的
//例如 AgeNowInWeeks('1963/06/24')=1975
function AgeNowInWeeks (const DOB: TDateTime): Integer;
//可传回几岁几月几周的详细年龄
function AgeNowDescr (const DOB: TDateTime): String;
function CheckDate(const sCheckedDateString: string): boolean;
//检查是否是中华民国的日期格式
//例如:CheckDate(DatetoStr(Now))=89/08/29,传回值是Boolean
{----------------- 周数处理用函数 --------------------}
//将日期值转换成周数
function DateToWeekNo (const DT: TDateTime): Integer;
//比较两个日期值是否相同
function DatesInSameWeekNo (const DT1, DT2: TDateTime): Boolean;
//将两个日期相减后转成周数
function WeekNosApart (const DT1, DT2: TDateTime): Integer;
//传回目前日期的周数
function ThisWeekNo: Integer;
//传回在X的年度的第n周的时间
//例如:GetWeekNoToDate(28,2001)='2001/07/08',取得值是从星期天开始
function GetWeekNoToDate_Sun (const WeekNo, Year: Word): TDateTime;
//传回在X的年度的第n周的时间
//例如:GetWeekNoToDate(28,2001)='2001/07/08',取得值是从星期一开始
function GetWeekNoToDate_Mon (const WeekNo, Year: Word): TDateTime;
//传回在X的年度的第n周的时间
//例如:DWYToDate(3,28,2001)='2001/07/10',取得值是强制从星期天开始的
function DWYToDate (const DOW, WeekNo, Year: Word): TDateTime;
//将周数转换成月日格式
//例如:WeekNoToDate(35)传回08/26
function WeekNoToDate(Const Weekno : Word):TDateTime;
{--- 检查确定日期函数 ---}
//: 如果传回值是真表示目前是一月
function IsJanuary (const DT: TDateTime): Boolean;
//: 如果传回值是真表示目前是二月
function IsFebruary (const DT: TDateTime): Boolean;
//: 如果传回值是真表示目前是三月
function IsMarch (const DT: TDateTime): Boolean;
//: 如果传回值是真表示目前是四月
function IsApril (const DT: TDateTime): Boolean;
//: 如果传回值是真表示目前是五月
function IsMay (const DT: TDateTime): Boolean;
//: 如果传回值是真表示目前是六月
function IsJune (const DT: TDateTime): Boolean;
//: 如果传回值是真表示目前是七月
function IsJuly (const DT: TDateTime): Boolean;
//: 如果传回值是真表示目前是八月
function IsAugust (const DT: TDateTime): Boolean;
//: 如果传回值是真表示目前是九月
function IsSeptember (const DT: TDateTime): Boolean;
//: 如果传回值是真表示目前是十月
function IsOctober (const DT: TDateTime): Boolean;
//: 如果传回值是真表示目前是十一月
function IsNovember (const DT: TDateTime): Boolean;
//: 如果传回值是真表示目前是十二月
function IsDecember (const DT: TDateTime): Boolean;
//: 如果传回值是真表示目前是上午
function IsAM (const DT: TDateTime): Boolean;
//: 如果传回值是真表示目前是下午
function IsPM (const DT: TDateTime): Boolean;
//: 如果传回值是真表示目前是中午
function IsNoon (const DT: TDateTime): Boolean;
//:如果传回值是真表示目前是夜晚
function IsMidnight (const DT: TDateTime): Boolean;
//: 如果传回值是真表示目前是星期天
function IsSunday (const DT: TDateTime): Boolean;
//: 如果日期值是星期一即为真
function IsMonday (const DT: TDateTime): Boolean;
//: 如果日期值是星期二即为真
function IsTuesday (const DT: TDateTime): Boolean;
//: 如果日期值是星期三即为真
function IsWednesday (const DT: TDateTime): Boolean;
//: 如果日期值是星期四即为真
function IsThursday (const DT: TDateTime): Boolean;
//: 如果日期值是星期五即为真
function IsFriday (const DT: TDateTime): Boolean;
//: 如果日期值是星期六即为真
function IsSaturday (const DT: TDateTime): Boolean;
//:如果日期值是星期六或日即为真
function IsWeekend (const DT: TDateTime): Boolean;
//: 如果日期值是星期一至五即为真
function IsWorkDays (const DT: TDateTime): Boolean;
function CheckLastDayOfMonth(DT : TDateTime) : Boolean;
//检查是否是本月的最后一天
implementation
uses
Windows, SysUtils; //, StrProcess;
function LInt2EStr (const L: LongInt): String;
begin
try
Result := IntToStr (L);
except
Result := '';
end;
end;
function LeftStr (const S : string; const N : Integer): string;
begin
Result := Copy (S, 1, N);
end;
function RightAfterStr (const S : String; const N : Integer): String;
begin
Result := Copy (S, N + 1, Length (S) - N );
end;
function FillStr (const Ch : Char; const N : Integer): string;
begin
SetLength (Result, N);
FillChar (Result [1], N, Ch);
end;
function PadChLeftStr (const S : string; const Ch : Char;
const Len : Integer): string;
var
N: Integer;
begin
N := Length (S);
if N < Len then
Result := FillStr (Ch, Len - N) + S
else
Result := S;
end;
function LInt2ZStr (const L: LongInt; const Len: Byte): String;
begin
Result := LInt2EStr (L);
Result := PadChLeftStr (LeftStr (Result, Len), '0', Len);
end;
function ReplaceChStr (const S : string;
const OldCh, NewCh : Char): string;
var
I: Integer;
begin
Result := S;
if OldCh = NewCh then
Exit;
for I := 1 to Length (S) do
if S [I] = OldCh then
Result [I] := NewCh;
end;
function Str2Ext (const S: String): Extended;
begin
try
Result := StrToFloat (S);
except
Result := 0;
end;
end;
function Str2Lint (const S: String): LongInt;
begin
try
Result := StrToInt (S);
except
Result := 0;
end;
end;
function IsLeapYear (Year: Word): Boolean;
begin
Result := ((Year and 3) = 0) and ((Year mod 100 > 0) or (Year mod 400 = 0))
end;
function Date2Str (const DT: TDateTime): String;
begin
try
if abs (DT) < 0.000001 then
Result := ''
else
Result := DateToStr (DT);
except
Result := '';
end;
end;
function GetYear (const DT: TDateTime): Word;
var
D, M: Word;
begin
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?