2012-02-20 222 views
3

我学习了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 

等,考虑太2月是29天,而不仅仅是28. 在delphi xe2,谁可以告诉我它是什么功能,或者如果需要手动写入?非常感谢。

+0

你应该问你关于http://meta.stackoverflow.com标签的问题 – 2012-02-20 14:50:01

+0

你的问题有几种可能的解释。 – 2012-02-20 14:58:09

+0

谢谢,解决了关于过滤器:) – 2012-02-20 14:59:54

回答

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());

+0

谢谢,它解决了我的问题。非常感谢。 – 2012-02-20 15:09:12

+2

@Marcello:如果是这样,你的问题的预期解释不同于最自然的问题...... – 2012-02-20 15:12:16

+0

不,它解决了有关柜台。实际上,我希望以日期时间格式转换一个整数(表示毫秒),这相当于使我变为:年,月,日,小时,分钟,秒和毫秒。我已经尝试过编码时间,它可以很好地工作几小时,几分钟,几秒和几毫秒,但编码不起作用。例如,在一天内有86400000毫秒,然后我确定编码器在几天内将我变成了1,但它变成了错误的值。 – 2012-02-20 15:28:14

3

我真的不明白你的问题。

如果你想翻译的天数(在某些时间跨度):

有,它不会被明确定义,对你的理由没有完全一样,原因很简单, :不是每个月都有相同的天数。因此,输入不能为只有几天。例如,如果输入“35天”,结果应该如何?应该是“1个月,4天”还是“1个月,5天”,“1个月,6天”或“1个月,7天”?相反,您需要指定初始和终止日期。

现在,在DateUtils,你有DaysBetweenMonthsBetweenYearsBetween,但这些只是近似。

但是,如果您可以使用近似值,则很容易:年数等于天数除以365.24的整数部分,月数等于小数部分乘以12,等等。

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

IncDay(StartOfTheYear(SomeYear), N) 
+0

你好,这是真的,我认为最初的日期是0(年= 0,月0日= 0)。日期时间是一个真正的价值,我看到设置日期时间变量例如0.99999999它使我23小时59分59秒和999毫秒;所以我认为将1.0000000设为1天,0个月,0年是可以的,但是对于我来说,1899年,12个月和30天的回报当然是错误的(对于我的情况)。太,如果我已经明白它为delphi代表第一个可用的日期。 – 2012-02-20 15:39:36

+1

@Marcello:你应该考虑阅读['TDateTime']的帮助文章(http://docwiki.embarcadero.com/VCL/en/System.TDateTime);-) – Chris 2012-02-20 15:49:34

+0

是@Chris,事实上我明白因为结果是的,在那里读书。 – 2012-02-20 15:55:12

相关问题