2013-11-27 57 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));