2013-11-27 27 views
-4

我基本上要这个C#代码:获取当前年,日和月在德尔福

if (month > currentDate.Month || (day > currentDate.Day && month > currentDate.Month)) 
{ 
    age = currentDate.Year - year - 1; 
} 
else 
{ 
    age = currentDate.Year - year; 
} 

进入德尔福。但我的问题是,我不知道如何将当前的年,月和日作为整数,以便我可以进行一些计算。我点击了与此相关的每个搜索结果,但没有人帮助我。 (真的不是德尔福的粉丝,但我们在我的计算类做语言)

+2

在功能看这里将是一个良好的开端http://www.delphibasics.co.uk /ByFunction.asp?Main=DatesAndTimes –

+0

查看[DecodeDate](http://docwiki.embarcadero.com/Libraries/XE2/de/System.SysUtils.DecodeDate)和[Now](http:// docs。 embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/SysUtils_Now.html) – bummi

+0

例如,如果Month> MonthOf(Now)或(Day> DayOf(Now))和(Month> MonthOf(Now)),则Age:= YearOf(Now) - Year - 1 else Age:= YearOf(Now) - Year; ',但是这样的代码需要改进很多。 – TLama

回答

2

添加DateUtils到您的用途,那么你可以使用DayOf月的一天,MonthOf为今年的和YearOf为年份。 Date为您提供了进入这些功能的当前日期。

+4

或者使用'SysUtils.DecodeDate()',它在单个函数调用中返回月份,日期和年份。 'DayOf()','MonthOf()'和'YearOf()'在内部使用'DecodeDate()',所以你会调用'DecodeDate()'三次并丢弃2/3的返回数据。 –

+0

我更喜欢你的答案,所以有一个+1。特别是因为我没有记住午夜前后的重复电话。 –

1

您可以使用DecodeDate分离出一个函数调用的年,月,日从Date函数的返回值值:

var 
    CurrYear, CurrMonth, CurrDay: Word; 
begin 
    DecodeDate(Date(), CurrYear, CurrMonth, CurrDay); 
    ... 
end; 
+3

划伤“旧版本”。 DateUtils在那里已经超过10年了。 –

+2

@FreeConsulting:我们在这里经常遇到有关Delphi 3,5和7的问题。如果有人使用其中的一种在搜索中发现这种情况,它仍然很有用。 :-)我自己以前不会使用任何比D2007更早的东西。 –

+1

'DecodeDate()'仍然存在于现代版本中,并且与其始终一样。仅仅因为'DateUtils'单元的存在并不总是使它适用于每种情况的最佳选择。如果您需要全部三个日期值 - 日,月,年 - 调用DecodeDate()会很有意义,它会在一次调用中返回所有三个值,而不是使用将日期值分隔为多个函数的'DateUtils'函数调用。 –

4

字面翻译就是如下:

uses 
    ..., DateUtils; 

if (month > MonthOf(Date)) or ((day > DayOf(Date)) and (month > MonthOf(Date)) then 
begin 
    age := YearOf(Date) - year - 1; 
end else 
begin 
    age := YearOf(Date) - year; 
end; 

但这不是最好的翻译。如果没有别的,如果代码在当前日期更改的午夜运行,则重复调用Date()会导致问题。下面会更安全:

uses 
    ..., SysUtils; 

var 
    wYear, wMonth, wDay: Word: 
begin 
    ... 
    DecodeDate(Date, wYear, wMonth, wDay); 
    if (month > wMonth) or ((day > wDay) and (month > wMonth) then 
    begin 
    age := wYear - year - 1; 
    end else 
    begin 
    age := wYear - year; 
    end; 
    ... 
end; 

或者,看看在DateUtils.YearsBetween()功能:

uses 
    ..., SysUtils, DateUtils; 

age := YearsBetween(Date, EncodeDate(year, month, day));