2009-04-21 7 views
1

として表示する方法C#で2つのDateTimesが指定されている場合、年と月の違いをどのように表示できますか?2つの日付の差分を00Y 00M

私は単純な引き算から来ているが、これは等の閏年、アカウントに任意の助け

おかげヶ月の異なる長さになりませんタイムスパンの基本的なarithmaticを行うことができます。

+0

になってしまったものは? – shahkalpesh

答えて

2

基礎となる表現は、100ナノ秒で測定されているので、12:00午前0時から1月1日、1つのADダニ、かなり正しく閏年などを処理する減算:

DateTime date1 = ... 
DateTime date2 = ... 

// date2 must be after date1 

TimeSpan difference = date2.Subtract(date1); 
DateTime age=new DateTime(tsAge.Ticks); 

int years = age.Years - 1; 
int months = age.Month - 1; 

Console.WriteLine("{0}Y, {1}M", years, months); 
0

あなたはこれを試みることができる:

DateTime date1 = new DateTime(1954, 7, 30); 
DateTime today = DateTime.Now; 

TimeSpan span = today - date1; 
DateTime age = DateTime.MinValue + span; 

int years = age.Year - 1; 
int months = age.Month - 1; 
int days = age.Day - 1; 

Console.WriteLine("years: {0}, months: {1}, days: {2}", years, months, days); 
+0

私はMinValueから始まるのが正しいとは思いません。あなたは価値がありますが、今月とは何の関係もありません。もちろん、その差は小さく、約31日ではなく28日です。しかし、あなたはまた、ダニを取って、同じサイズの12の部分に年を分割することができます... –

0

どの月にかかりますか?期間は、その年の特定の年または月に拘束されません。あなたが唯一の2つの日付の間の日数カウントすることができます:

Timspan span = date2 - date1; 

Console.Writeline("Days between date1 and date2: {0}", span.Days); 
DateTime.MinValueから数え

をちょうどスタートとして年間0001取ると、1月から数ヶ月をカウントします。これは実用的だとは思わない。

EDIT:

は別の考えを持っていました。あなたはdate1から月を数えることができます:

// primitive, inelegant, but should work if date1 < date2 
int years = date2.Year - date1.Year; 
int month = date2.Month - date1.Month; 
if (month < 0) 
{ 
    years -= 1; 
    month += 12; 
} 
Console.Writeline("{0}Y {1}M", years, month); 

ここでの問題は、日数を無視することです。結局それは良い解決策ではありません。

1

FWIWは、ここでは、あなたが期待する日付と出力の例を投稿できる私は

 DateTime servicelength = new DateTime(DateTime.Now.Subtract(employee.StartDate).Ticks); 
     LengthOfService.Text = String.Format("{0}Y {1}M", servicelength.Year - 1, servicelength.Month - 1); 
関連する問題