我正在研究TDateTime函数和过程,但没有找到允许我在等效的Year,Month,Day转换若干天的东西,例如,如果我有天= 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
等等,考虑到2月份是29天而不仅仅是28天。
在delphi xe2中,谁能告诉我它做了什么功能,或者是否需要手动编写?非常感谢。
答案 0 :(得分:6)
使用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());
。
答案 1 :(得分:3)
我真的不明白你的问题。
如果您想翻译几天(在某些时间段内):
没有什么是完全相同的,原因很简单,因为你给出的理由不是很明确:不是每个月都有相同的天数。因此,输入不能只有几天。例如,如果您输入“35天”,结果应该是什么?应该是“1个月,4天”还是“1个月,5天”,“1个月,6天”或“1个月,7天”?相反,您需要指定初始日期和最终日期。
现在,在DateUtils
,您有DaysBetween
,MonthsBetween
和YearsBetween
,但这些 只是近似值。
如果您可以使用近似值,但很容易:年数等于天数的整数部分除以365.24,月数等于小数部分乘以12,依此类推。< / p>
如果您想获得某一年的第N天:
IncDay(StartOfTheYear(SomeYear), N)