转换年,月,日日期格式的天数

时间:2012-02-20 14:39:54

标签: delphi delphi-xe2

我正在研究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中,谁能告诉我它做了什么功能,或者是否需要手动编写?非常感谢。

2 个答案:

答案 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,您有DaysBetweenMonthsBetweenYearsBetween,但这些 只是近似值。

如果您可以使用近似值,但很容易:年数等于天数的整数部分除以365.24,月数等于小数部分乘以12,依此类推。< / p>

如果您想获得某一年的第N天:

IncDay(StartOfTheYear(SomeYear), N)