私はこれが宿題なので、答えを提示するのではなく正しい方向にあなたを押し込もうとします。
社会保障番号から誕生日を抽出する必要があります。 10の累乗で整数の除算を行うことによって、右から数字の「チョップ」を行うことができます。あなたは、時間(例えば誕生日)にポイントを表すためにDateTime
クラスを使用することができますC#では
123456/100 = 1234
1234%100 = 34
:10の力によって剰余演算を行うことで、あなたが必要な桁数を保つことができます。フィールドDateTime.Now
には現在の時刻が含まれます。
あなたは年に年齢を取得したい(切り捨て)ので、次の2つのDateTime
値のYear
プロパティをsubstractています。今年も誕生日を迎えていれば、それを考慮する必要があります。先に
スポイラー
最大のCPRは3112999999で、その数はInt32.MaxValue
よりも実際に大きくなっています。つまり、_Cpr
のタイプをuint
(またはlong
)に変更する必要があります。以下のコードはTheKanedaが2桁の年の4桁の年を取得するためのルールも考慮しています。コードは、人はそれが誕生日を抽出し、計算を扱う別々の部分にリファクタリングする必要があるコードを向上させるために2月29日に生まれているとき、それは状況を処理しない驚くほど複雑であるにもかかわらず
public class Person
{
uint _Cpr;
public int Age
{
get
{
int century = (int) ((cpr/1000)%10);
int shortBirthYear = (int) ((cpr/10000)%100);
int birthYear = 1900 + shortBirthYear;
if ((century == 4 || century == 9) && shortBirthYear <= 36)
birthYear += 100;
else if (5 <= century && century <= 8 && shortBirthYear <= 57)
birthYear += 100;
int birthMonth = (int) ((cpr/1000000)%100);
int birthDayOfMonth = (int) ((cpr/100000000));
DateTime birthDate = new DateTime(birthYear, birthMonth, birthDayOfMonth);
DateTime today = DateTime.Now.Date;
DateTime birthDay = new DateTime(today.Year, birthMonth, birthDayOfMonth);
int birthdayAdjustment = today < birthDay ? -1 : 0;
int age = today.Year - birthDate.Year + birthdayAdjustment;
}
}
}
年代。最後の部分は2月29日の問題に対処する必要があります。文化によっては、2月29日に生まれた人が2月28日に誕生日を祝うことを発見するかもしれません。
「birthDay?-1:0;」までこれまであなたにフォローしていました。 - 私はまだその演算子を使用していない - 私は間違っているが、私はそれがクラス内で使用する変数を宣言することは不可能だと思った – Treelink
@Treelink:私は条件演算子を削除しました。あなたはそれについてここで読むことができます:http://msdn.microsoft.com/en-us/library/ty67wk28(v=vs.100).aspx –
私は実際に私はこのコードを理解すると思う - 私の頭は私はドンでいっぱいです't-know-what、しかし私はそれを取得し、私は再現できると思う - ありがとう! :)実際にデンマークの社会保障番号については、あなたはこれをする必要がありますが、明らかにこの課題のためにはありますが(実際には、このようにすることはできませんでしたが、私は決してそれを働かせることはできませんでした!) – Treelink