将天转换为年、月、日日期时间格式



我研究了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中,有DaysBetweenMonthsBetweenYearsBetween,但这些只是近似值。

不过,如果你能接受近似值,那就很容易了:年数等于天数除以365.24的整数部分,月数等于小数部分乘以12,依此类推

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

IncDay(StartOfTheYear(SomeYear), N)

最新更新