2009-07-23 15 views
12

मेरे पास किसी व्यक्ति के जन्मदिन के साथ डेटटाइम ऑब्जेक्ट है।जन्मदिन तक शेष दिनों की गणना करें?

DateTime date = new DateTime(year, month, day); 

मुझे पता है कि कितने दिनों इस व्यक्ति के अगले जन्मदिन से पहले शेष रहे हैं चाहते हैं: मैं निम्नलिखित तरीके से व्यक्ति के वर्ष, माह और जन्म के दिन का उपयोग कर, इस वस्तु का निर्माण किया। सी # में ऐसा करने का सबसे अच्छा तरीका क्या है (मैं भाषा में नया हूं)?

+0

निश्चित रूप से एक डुप्ली? ... –

+2

@ मिच - ऐसा लगता है लेकिन पूर्ण पाठ खोज को कुछ सेकंड में डुप्ली नहीं मिला, इसलिए मैंने सोचा कि मैं इस सवाल को एक स्पष्ट तरीके से लिखूंगा ... –

+0

http://stackoverflow.com/ प्रश्न/9/कैसे करें-मैं-गणना-कुछ-उम्र-इन-सी –

उत्तर

21
// birthday is a DateTime containing the birthday 

DateTime today = DateTime.Today; 
DateTime next = new DateTime(today.Year,birthday.Month,birthday.Day); 

if (next < today) 
    next = next.AddYears(1); 

int numDays = (next - today).Days; 

यह मामूली एल्गोरिदम विफल रहता है अगर जन्मदिन 2 9 फरवरी है।

DateTime today = DateTime.Today; 
DateTime next = birthday.AddYears(today.Year - birthday.Year); 

if (next < today) 
    next = next.AddYears(1); 

int numDays = (next - today).Days; 
+1

कुल दिन दो बार लौटाता है: http://msdn.microsoft.com/en-us/library/system.timespan.totaldays .aspx – Mac

+1

+1 यह "मैनुअल" जिस तरह से मैं अभी उपयोग कर रहा हूं, उसके करीब है, मैंने सोचा कि शायद इसे सरल बनाने के लिए एक साफ सी # चाल है। –

+0

@ मैक: निश्चित। धन्यवाद –

-1

इस विधि का प्रयास करें

private int GetDaysBeforeBirthday(DateTime birthdate) 
{ 
    DateTime nextBday = new DateTime(DateTime.Now.Year, birthdate.Month, birthdate.Day); 
    if (DateTime.Today > nextBday) 
     nextBday = nextBday.AddYears(1); 
    return (nextBday - DateTime.Today).Days; 
} 

बस अपनी जन्मतिथि गुजरती हैं और यह अपने अगले जन्मदिन

से पहले शेष दिनों वापस आ जाएगी: यह विकल्प (जो अनिवार्य रूप से एसईबी नीलसन द्वारा जवाब के रूप में एक ही है
+2

फिलिप के जवाब से यह अलग कैसे है? –

5

आज के साल और जन्मदिन का महीना और दिन का उपयोग छलांग साल साथ काम नहीं करेंगे

के बाद परीक्षण का एक छोटा सा है, यह मैं क्या काम करने के लिए मिलता है:

private static int GetDaysUntilBirthday(DateTime birthday) { 
    var nextBirthday = birthday.AddYears(DateTime.Today.Year - birthday.Year); 
    if(nextBirthday < DateTime.Today) { 
     nextBirthday = nextBirthday.AddYears(1); 
    } 
    return (nextBirthday - DateTime.Today).Days; 
} 

एक छलांग साल पर है और यह भी जब जन्मदिन एक ही दिन है 29 वें फरवरी साथ परीक्षण किया गया।

+1

यह एकमात्र तरीका है जो 100% काम करता है। इसका कारण यह है कि यह 'AddYears' का उपयोग करता है जो फरवरी की अल्टिमो तिथियों के लिए कभी विफल नहीं होता है। – Gustav

-1
 DateTime Variable = DateTime.Now; 
     int NumOfDaysTillNextMonth = 0; 
     while (Variable < Comparer) //Comparer is just a target datetime 
     { 
      Variable = Variable.AddDays(1); 
      NumOfDaysTillNextMonth++; 
     } 

अभी एक कार्यक्रम के लिए ऐसा करना था। यदि आप की जरूरत है तो अन्य तरीकों के विपरीत यह काफी आसान है कि शेष दिनों का एक पूर्णांक शेष है।

1

यह फिलिप लेबेर्ट के उत्तर के उत्तर पर आधारित है, लेकिन एक अतिरिक्त एज केस को संभालता है जिसे मैंने पिछले किसी भी उत्तर में नहीं देखा है।

किनारे का मामला मैं संबोधित कर रहा हूं, जब जन्मदिन लीप पर होता है, जन्मदिन वर्तमान वर्ष के लिए अतीत में होता है, और चालू वर्ष एक लीप वर्ष नहीं है लेकिन अगले वर्ष है।

प्रदान किया गया वर्तमान उत्तर एक कम दिन के परिणामस्वरूप होगा क्योंकि यह चालू वर्ष के 28 फरवरी को "अगला" सेट करेगा और फिर एक वर्ष में 28 वर्ष की तारीख को एक लीप वर्ष (जो सही नहीं है) को जोड़ता है। एक लाइन बदलना इस किनारे के मामले को संभालता है।

DateTime today = DateTime.Today; 
DateTime next = birthday.AddYears(today.Year - birthday.Year); 

if (next < today) 
{ 
    if (!DateTime.IsLeapYear(next.Year + 1)) 
     next = next.AddYears(1); 
    else 
     next = new DateTime(next.Year + 1, birthday.Month, birthday.Day); 
} 

int numDays = (next - today).Days; 

अद्यतन: प्रति फिलिप के संपादन के अनुसार संपादित किया गया कि मेरे कोड में एक बड़ा दोष था।

+0

यह कोड क्रैश होता है जब आज का वर्ष किसी भी वर्ष एक लीप वर्ष से पहले एक वर्ष को छोड़कर और जन्मदिन 2 9 फरवरी है। –

+0

यह (अब) उत्तर स्वीकार किया जाना चाहिए क्योंकि यह लीप वर्षों सहित सभी तिथियों को सही तरीके से संभालता है –

0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DateTime dt1 = DateTime.Parse("09/08/2012"); 
      DateTime dt2 = DateTime.Parse(DateTime.Now.ToString()); 
      int days = (dt2 - dt1).Days; 
      Console.WriteLine(days); 

      double month = (dt2 - dt1).Days/30; 
      Console.WriteLine(month); 
      double year = (dt2 - dt1).Days/365; 
      Console.WriteLine(year); 
      Console.Read(); 
     } 
    } 
} 
संबंधित मुद्दे