我研究了TDateTime函数和过程,但没有发现允许我转换等效年、月、日中的天数的东西,例如,如果我有天数=0,我应该有:
Year: 0
Month: 0
Day: 0
或者我有天=1,应该有:
Year: 0
Month: 0
Day: 1 // Just 1 day
或者如果我有天数=32:
Year: 0
Month: 1 // January is 31 days
Day: 1 // Day is 1
// Total are 32 days
等等,考虑到二月是29天,而不仅仅是28天。在delphixe2中,谁能告诉我用什么函数做它,或者如果需要手动编写它?非常感谢。
使用DateUtils:中的方法
procedure daysToDate(days: Integer; out day, month, year: Integer);
var
january1st: TDateTime;
targetDate: TDateTime;
begin
january1st := StartOfTheYear(Now());
targetDate := IncDay(january1st, days);
day := DayOfTheMonth(targetDate) - 1;
month := MonthOfTheYear(targetDate) - 1;
year := YearOf(targetDate) - YearOf(january1st);
end;
此代码假定您正在计算当前年份中的天数。如果要在其他年份开始,请根据需要修改行january1st := StartOfTheYear(Now());
。
我真的不明白你的问题。
如果您想翻译几天(在某些时间跨度内):
没有什么是完全这样的,原因很简单,因为它不会定义明确,因为你给出的原因:不是每个月都有相同的天数。因此,输入不能仅为天数。例如,如果您输入"35天",结果应该是什么?它应该是"1个月4天"还是"1个月中5天"、"1个月末6天"或"1个半月7天"?相反,您需要指定初始日期和结束日期。
现在,在DateUtils
中,有DaysBetween
、MonthsBetween
和YearsBetween
,但这些只是近似值。
不过,如果你能接受近似值,那就很容易了:年数等于天数除以365.24的整数部分,月数等于小数部分乘以12,依此类推
如果您想获得某一年的第N天:
IncDay(StartOfTheYear(SomeYear), N)