cxdateutils.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,765 行 · 第 1/5 页
PAS
1,765 行
function GetMinSupportedYear: Integer; override;
public
constructor Create; override;
destructor Destroy; override;
function FromDateTime(ADate: TDateTime): TcxDateTime; overload; override;
function GetFirstWeekDay: Byte; override;
function GetWeekNumber(ADate: TcxDateTime; AStartOfWeek: TDay;
AFirstWeekOfYear: TcxFirstWeekOfYear): Cardinal; overload; override;
function GetDaysInMonth(AEra: Integer; AYear, AMonth: Cardinal): Cardinal; override;
function GetDaysInYear(AEra: Integer; AYear: Cardinal): Cardinal; override;
function GetFullWeeksInYear(AYear: Cardinal): Cardinal; override;
function GetMonthsInYear(AEra: Integer; AYear: Cardinal): Cardinal; override;
function IsLeapDay(AEra: Integer; AYear, AMonth, ADay: Cardinal): Boolean; override;
function IsLeapMonth(AEra: Integer; AYear, AMonth: Cardinal): Boolean; override;
function IsLeapYear(AEra: Integer; AYear: Cardinal): Boolean; override;
function ToDateTime(ADateTime: TcxDateTime): TDateTime; overload; override;
property GregorianCalendarType: TcxGregorianCalendarTableType read
FGregorianCalendarType write FGregorianCalendarType;
end;
{ TcxJapaneseCalendarTable }
TcxJapaneseCalendarTable = class(TcxGregorianCalendarTable)
protected
function GetCalendarAlgorithmType: TcxCalendarAlgorithmType; override;
function GetCalendarID: TcxCALID; override;
function GetDefaultEra: TcxEra; override;
function GetMaxSupportedDate: TDateTime; override;
function GetMinSupportedDate: TDateTime; override;
function GetMaxSupportedYear: Integer; override;
function GetMinSupportedYear: Integer; override;
public
constructor Create; override;
function FromDateTime(ADate: TDateTime): TcxDateTime; overload; override;
function GetFirstWeekDay: Byte; override;
function ToDateTime(ADateTime: TcxDateTime): TDateTime; overload; override;
end;
{ TcxTaiwanCalendarTable }
TcxTaiwanCalendarTable = class(TcxJapaneseCalendarTable)
protected
function GetCalendarAlgorithmType: TcxCalendarAlgorithmType; override;
function GetCalendarID: TcxCALID; override;
function GetDefaultEra: TcxEra; override;
function GetMinSupportedDate: TDateTime; override;
function GetMaxSupportedYear: Integer; override;
function GetMinSupportedYear: Integer; override;
public
constructor Create; override;
end;
{ TcxKoreanCalendarTable }
TcxKoreanCalendarTable = class(TcxJapaneseCalendarTable)
protected
function GetCalendarAlgorithmType: TcxCalendarAlgorithmType; override;
function GetCalendarID: TcxCALID; override;
function GetDefaultEra: TcxEra; override;
function GetMinSupportedDate: TDateTime; override;
function GetMaxSupportedYear: Integer; override;
function GetMinSupportedYear: Integer; override;
public
constructor Create; override;
end;
{ TcxHijriCalendarTable }
TcxHijriCalendarTable = class(TcxCustomCalendarTable)
private
FDefaultEra: TcxEra;
protected
function GetCalendarAlgorithmType: TcxCalendarAlgorithmType; override;
function GetCalendarID: TcxCALID; override;
function GetDefaultEra: TcxEra; override;
function GetMaxSupportedDate: TDateTime; override;
function GetMinSupportedDate: TDateTime; override;
function GetMaxSupportedYear: Integer; override;
function GetMinSupportedYear: Integer; override;
public
constructor Create; override;
destructor Destroy; override;
function FromDateTime(ADate: TDateTime): TcxDateTime; overload; override;
function GetFirstWeekDay: Byte; override;
function GetWeekNumber(ADate: TcxDateTime; AStartOfWeek: TDay;
AFirstWeekOfYear: TcxFirstWeekOfYear): Cardinal; overload; override;
function GetDaysInMonth(AEra: Integer; AYear, AMonth: Cardinal): Cardinal; override;
function GetDaysInYear(AEra: Integer; AYear: Cardinal): Cardinal; override;
function GetFullWeeksInYear(AYear: Cardinal): Cardinal; override;
function GetMonthsInYear(AEra: Integer; AYear: Cardinal): Cardinal; override;
function IsLeapDay(AEra: Integer; AYear, AMonth, ADay: Cardinal): Boolean; override;
function IsLeapMonth(AEra: Integer; AYear, AMonth: Cardinal): Boolean; override;
function IsLeapYear(AEra: Integer; AYear: Cardinal): Boolean; override;
function ToDateTime(ADateTime: TcxDateTime): TDateTime; overload; override;
function GetMonthNumber(AYear: Integer; const S: string): Integer; override;
end;
{ TcxThaiCalendarTable }
TcxThaiCalendarTable = class(TcxJapaneseCalendarTable)
protected
function GetCalendarAlgorithmType: TcxCalendarAlgorithmType; override;
function GetCalendarID: TcxCALID; override;
function GetDefaultEra: TcxEra; override;
function GetMinSupportedDate: TDateTime; override;
function GetMaxSupportedYear: Integer; override;
function GetMinSupportedYear: Integer; override;
public
constructor Create; override;
end;
{ TcxHebrewCalendar }
TcxHebrewCalendarTableTypeYear = (hctyDeficient = 1, hctyNormal = 2, hctyPerfect = 3);
TcxHebrewCalendarTable = class(TcxCustomCalendarTable)
private
FDefaultEra: TcxEra;
function GetDayDifference(ALunarYearType, AMonth, ADay,
ALunarMonth, ALunarDay: Integer): Integer;
function HebrewNumber(const S: string): Integer;
procedure GetLunarMonthDay(AYear: Integer; var ADate: TcxDate);
protected
function GetCalendarAlgorithmType: TcxCalendarAlgorithmType; override;
function GetCalendarID: TcxCALID; override;
function GetDefaultEra: TcxEra; override;
function GetMaxSupportedDate: TDateTime; override;
function GetMinSupportedDate: TDateTime; override;
function GetMaxSupportedYear: Integer; override;
function GetMinSupportedYear: Integer; override;
public
constructor Create; override;
destructor Destroy; override;
function FromDateTime(ADate: TDateTime): TcxDateTime; overload; override;
function GetFirstWeekDay: Byte; override;
function GetYearType(AYear: Cardinal): TcxHebrewCalendarTableTypeYear;
function GetWeekNumber(ADate: TcxDateTime; AStartOfWeek: TDay;
AFirstWeekOfYear: TcxFirstWeekOfYear): Cardinal; overload; override;
function GetDaysInMonth(AEra: Integer; AYear, AMonth: Cardinal): Cardinal; override;
function GetDaysInYear(AEra: Integer; AYear: Cardinal): Cardinal; override;
function GetFullWeeksInYear(AYear: Cardinal): Cardinal; override;
function GetMonthsInYear(AEra: Integer; AYear: Cardinal): Cardinal; override;
function IsLeapDay(AEra: Integer; AYear, AMonth, ADay: Cardinal): Boolean; override;
function IsLeapMonth(AEra: Integer; AYear, AMonth: Cardinal): Boolean; override;
function IsLeapYear(AEra: Integer; AYear: Cardinal): Boolean; override;
function ToDateTime(ADateTime: TcxDateTime): TDateTime; overload; override;
function GetDayNumber(const S: string): Integer; override;
function GetMonthNumber(AYear: Integer; const S: string): Integer; override;
function GetYearNumber(const S: string): Integer; override;
end;
TcxGetCalendarInfo = function (Locale: LCID; Calendar: CALID;
CalendType: CALTYPE; lpCalData : lpStr;
cchData: Integer; lpValue: lpDWord): Integer; stdcall;
function cxGetCalendarInfo(Locale: LCID; Calendar: CALID;
CalendType: CALTYPE; lpCalData: lpStr; cchData: Integer;
lpValue: PDWORD): Integer;
function cxDateToLocalFormatStr(ADate: TDateTime): string;
function cxDateToStr(ADate: TDateTime): string; overload;
function cxDateToStr(ADate: TDateTime; AFormat: TFormatSettings): string; overload;
function cxDayNumberToLocalFormatStr(ADate: TDateTime): string; overload;
function cxDayNumberToLocalFormatStr(ADay: Integer; ACalendar: TcxCustomCalendarTable = nil): string; overload;
function cxGetCalendar(ACalendType: CALTYPE): TcxCustomCalendarTable;
function cxGetLocalCalendarID: TcxCALID;
function cxGetLocalCalendar: TcxCustomCalendarTable;
function cxGetDateSeparator: Char;
function cxGetLocalFormatSettings: TFormatSettings;
function cxGetLocalLongDateFormat: string;
function cxGetLocalLongTimeFormat: string;
function cxGetLocalMonthName(ADate: TDateTime; ACalendar: TcxCustomCalendarTable): string; overload;
function cxGetLocalMonthName(AYear, AMonth: Integer; ACalendar: TcxCustomCalendarTable): string; overload;
function cxGetLocalMonthYear(ADate: TDateTime; ACalendar: TcxCustomCalendarTable = nil): string;
function cxGetLocalShortDateFormat: string;
function cxGetLocalTimeAMString: string;
function cxGetLocalTimePMString: string;
function cxGetLocalTimeSeparator: Char;
function cxGetLocalYear(ADate: TDateTime; ACalendar: TcxCustomCalendarTable = nil): string;
function cxGetDayOfWeekName(I: Integer; AFontCharset: TFontCharset): string;
function cxIsGregorianCalendar(ACalendar: TcxCustomCalendarTable = nil): Boolean;
function cxLocalFormatStrToDate(const ADateStr: string): TDateTime;
function cxStrToDate(const ADateStr: string;
ACalendar: TcxCustomCalendarTable = nil): TcxDateTime; overload;
function cxStrToDate(const ADateStr: string;
AFormat: TFormatSettings;
ACalendar: TcxCustomCalendarTable = nil): TcxDateTime; overload;
function cxStrToDate(const ADateString: string; const AFormat: TFormatSettings;
ACALTYPE: CALTYPE): TDate; overload;
function cxTimeToStr(ATime: TDateTime): string; overload;
function cxTimeToStr(ATime: TDateTime; ATimeFormat: string): string; overload;
function cxTimeToStr(ATime: TDateTime; AFormatSettings: TFormatSettings): string; overload;
var
MinYear: Integer = 100;
MaxYear: Integer = 9999;
cxMaxDateTime: Double = 2958465.99999; // 12/31/9999 11:59:59.999 PM
cxUseSingleCharWeekNames: Boolean = True;
procedure AddDateRegExprMaskSmartInput(var AMask: string; ACanEnterTime: Boolean);
procedure DecMonth(var AYear, AMonth: Word);
procedure IncMonth(var AYear, AMonth: Word); overload;
procedure ChangeMonth(var AYear, AMonth: Word; Delta: Integer);
function GetMonthNumber(const ADate: TDateTime): Integer;
function GetDateElement(ADate: TDateTime; AElement: TcxDateElement;
ACalendar: TcxCustomCalendarTable = nil): Integer;
function IsLeapYear(AYear: Integer): Boolean;
function DaysPerMonth(AYear, AMonth: Integer): Integer;
function CheckDay(AYear, AMonth, ADay: Integer): Integer;
function TimeOf(const AValue: TDateTime): TDateTime;
function DateOf(const AValue: TDateTime): TDateTime;
function DayOfWeekOffset(const AValue: TDateTime): TDayOfWeek;
function GetStartDateOfMonth(const ADate: TDateTime): TDateTime;
function GetStartOfWeek: Integer;
function GetEndDateOfMonth(const ADate: TDateTime; AIgnoreTime: Boolean): TDateTime;
function GetStartDateOfYear(const ADate: TDateTime): TDateTime;
function GetEndDateOfYear(const ADate: TDateTime; AIgnoreTime: Boolean): TDateTime;
{!!! TODO: adapt to .net}
function cxGetDateFormat(ADate: TDateTime; out AFormatDate: string; AFlags: Integer; AFormat: string = ''): Boolean;
function DateToLongDateStr(ADate: TDateTime): string;
function GetWeekNumber(ADate: TDateTime; AStartOfWeek: TDay;
AFirstWeekOfYear: TcxFirstWeekOfYear): Integer;
{$IFNDEF DELPHI6}
function HourOf(ADateTime: TDateTime): Word;
function IsPM(const AValue: TDateTime): Boolean;
function EncodeDateWeek(const AYear, AWeekOfYear: Word;
const ADayOfWeek: Word): TDateTime;
procedure DecodeDateWeek(const AValue: TDateTime; out AYear, AWeekOfYear,
ADayOfWeek: Word);
function DaysInAMonth(const AYear, AMonth: Word): Word;
function DaysInMonth(const AValue: TDateTime): Word;
function DayOf(const AValue: TDateTime): Word;
function DayOfTheMonth(const AValue: TDateTime): Word;
function DayOfTheWeek(const AValue: TDateTime): Word;
procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay,
AHour, AMinute, ASecond, AMilliSecond: Word);
function EncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond,
AMilliSecond: Word): TDateTime;
procedure IncAMonth(var Year, Month, Day: Word; NumberOfMonths: Integer = 1);
function MinuteOf(const AValue: TDateTime): Word;
function MonthOf(const AValue: TDateTime): Word;
function StartOfTheYear(const AValue: TDateTime): TDateTime;
function StartOfTheMonth(const AValue: TDateTime): TDateTime;
function YearOf(const AValue: TDateTime): Word;
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 IncYear(const AValue: TDateTime;
const ANumberOfYears: Integer = 1): TDateTime;
function IncMonth(const DateTime: TDateTime; NumberOfMonths: Integer): TDateTime; overload;
function IncWeek(const AValue: TDateTime;
const ANumberOfWeeks: Integer = 1): TDateTime;
function IncDay(const AValue: TDateTime;
const ANumberOfDays: Integer = 1): TDateTime;
function IncHour(const AValue: TDateTime; const ANumberOfHours: Int64 = 1): TDateTime;
function IncMinute(const AValue: TDateTime; const ANumberOfMinutes: Int64 = 1): TDateTime;
function WeekOfTheMonth(const AValue: TDateTime): Word;
function WeekOf(AValue: TDateTime): Word;
function WeekOfTheYear(const AValue: TDateTime): Word;
function DayOfTheYear(AValue: TDateTime): Word;
function EndOfTheYear(AValue: TDateTime): TDateTime;
{$ENDIF}
function cxDateTimeToText(ADate: TDateTime; AFourDigitYearNeeded: Boolean = False; AUseDelphiDateTimeFormats: Boolean = False): string;
function cxTextToDateTime(const AText: string; AUseDelphiDateTimeFormats: Boolean = False): TDateTime;
function DateTimeToText(ADate: TDateTime; AFourDigitYearNeeded: Boolean = False): string;
function DateTimeToTextEx(const ADate: TDateTime; AIsMasked: Boolean;
AIsDateTimeEdit: Boolean = False; AFourDigitYearNeeded: Boolean = False): string;
function TextToDateEx(const AText: string; var ADate: TDateTime): Boolean;
function StrToDateDef(const ADateStr: string; ADefDate: TDateTime): TDateTime;
function SmartTextToDate(const AText: string; var ADate: TDateTime): Boolean;
function cxMinDateTime: Double;
function cxStrToDateTime(S: string; AUseOleDateFormat: Boolean;
out ADate: TDateTime): Boolean;
implementation
uses
DateUtils, cxFormats, cxLibraryStrs, cxControls, cxGraphics;
type
TcxDateEditSmartInput = (deiToday, deiYesterday, deiTomorrow,
deiSunday, deiMonday, deiTuesday, deiWednesday, deiThursday, deiFriday, deiSaturday,
deiFirst, deiSecond, deiThird, deiFourth, deiFifth, deiSixth, deiSeventh,
deiBOM, deiEOM, deiNow);
var
scxDateEditSmartInput: array [TcxDateEditSmartInput] of string;
const
cxHebrewTable: array [0..1315] of Integer =
(7,3,17,3, // 1583-1584 (Hebrew year: 5343 - 5344)
0,4,11,2,21,6,1,3,13,2, // 1585-1589
25,4,5,3,16,2,27,6,9,1, // 1590-1594
20,2,0,6,11,3,23,4,4,2, // 1595-1599
14,3,27,4,8,2,18,3,28,6, // 1600
11,1,22,5,2,3,12,3,25,4, // 1605
6,2,16,3,26,6,8,2,20,1, // 1610
0,6,11,2,24,4,4,3,15,2, // 1615
25,6,8,1,19,2,29,6,9,3, // 1620
22,4,3,2,13,3,25,4,6,3, // 1625
17,2,27,6,7,3,19,2,31,4, // 1630
11,3,23,4,5,2,15,3,25,6, // 1635
6,2,19,1,29,6,10,2,22,4, // 1640
3,3,14,2,24,6,6,1,17,3, // 1645
28,5,8,3,20,1,32,5,12,3, // 1650
22,6,4,1,16,2,26,6,6,3, // 1655
17,2,0,4,10,3,22,4,3,2, // 1660
14,3,24,6,5,2,17,1,28,6, // 1665
9,2,19,3,31,4,13,2,23,6, // 1670
3,3,15,1,27,5,7,3,17,3, // 1675
29,4,11,2,21,6,3,1,14,2, // 1680
25,6,5,3,16,2,28,4,9,3, // 1685
20,2,0,6,12,1,23,6,4,2, // 1690
14,3,26,4,8,2,18,3,0,4, // 1695
10,3,21,5,1,3,13,1,24,5, // 1700
5,3,15,3,27,4,8,2,19,3, // 1705
29,6,10,2,22,4,3,3,14,2, // 1710
26,4,6,3,18,2,28,6,10,1, // 1715
20,6,2,2,12,3,24,4,5,2, // 1720
16,3,28,4,8,3,19,2,0,6, // 1725
12,1,23,5,3,3,14,3,26,4, // 1730
7,2,17,3,28,6,9,2,21,4, // 1735
1,3,13,2,25,4,5,3,16,2, // 1740
27,6,9,1,19,3,0,5,11,3, // 1745
23,4,4,2,14,3,25,6,7,1, // 1750
18,2,28,6,9,3,21,4,2,2, // 1755
12,3,25,4,6,2,16,3,26,6, // 1760
8,2,20,1,0,6,11,2,22,6, // 1765
4,1,15,2,25,6,6,3,18,1, // 1770
29,5,9,3,22,4,2,3,13,2, // 1775
23,6,4,3,15,2,27,4,7,3, // 1780
19,2,31,4,11,3,21,6,3,2, // 1785
15,1,25,6,6,2,17,3,29,4, // 1790
10,2,20,6,3,1,13,3,24,5, // 1795
4,3,16,1,27,5,7,3,17,3, // 1800
0,4,11,2,21,6,1,3,13,2, // 1805
25,4,5,3,16,2,29,4,9,3, // 1810
19,6,30,2,13,1,23,6,4,2, // 1815
14,3,27,4,8,2,18,3,0,4, // 1820
11,3,22,5,2,3,14,1,26,5, // 1825
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?