2010-06-30 19 views
32

संभव डुप्लिकेट:
How do I calculate someone’s age in C#?दो तिथियों के बीच अंतर की गणना करें और वर्षों में मूल्य प्राप्त करें?

मैं मूल रूप से कर्मचारियों की आयु गणना करना चाहते हैं - तो हम, प्रत्येक कर्मचारी के लिए जन्म तिथि है तो पर सी # साइड मैं की तरह कुछ करना चाहता हूँ यह -

int age=Convert.Int32(DateTime.Now-DOB); 

मैं दिन का उपयोग कर सकता हूं और हेरफेर कर सकता हूं तो उम्र प्राप्त करें ... लेकिन मैं जानना चाहता था कि क्या कुछ है मैं वर्षों की संख्या प्राप्त करने के लिए सीधे उपयोग कर सकता हूं।

उत्तर

60

क्या आप एक कर्मचारी के लिए वर्षों में उम्र की गणना करना चाहते हैं? तो फिर तुम (Calculate age in C# से) इस स्निपेट का उपयोग कर सकते हैं:

DateTime now = DateTime.Today; 
int age = now.Year - bday.Year; 
if (bday > now.AddYears(-age)) age--; 

यदि नहीं, तो कृपया स्पष्ट करें। मुझे समझने में कठिनाई हो रही है कि आप क्या चाहते हैं।

+0

हां द्वारा यह है कि क्या मैं करना चाहता हूँ .. इसे अच्छी तरह से phrasing के लिए .sorry .. – Vishal

+0

बढ़िया! कोई समस्या नहीं। – alexn

+0

हाय, आप तीसरी पंक्ति में उम्र क्यों कम करते हैं? – WTFZane

0

गणित.गोल (DateTime.Now.Subtract (जन्म तिथि) .TotalDays/365.0)

के रूप में कहे अनुसार, इस काम नहीं करेगा। आपको यह करना होगा:

(Int32)Math.Round((span.TotalDays - (span.TotalDays % 365.0))/365.0); 

और उस बिंदु पर दूसरा समाधान कम जटिल है और बड़े पैमाने पर सटीक है।

संपादित 2, कैसे के बारे में:

Math.Floor(DateTime.Now.Subtract(DOB).TotalDays/365.0) 

मसीह मैं बुनियादी गणित में इन दिनों चूसना ...

+1

काम नहीं करता है - एलेक्सन में यह –

+0

है, यह केवल छोटे स्पैन के लिए ही काम करेगा, लेकिन अगर कोई 150 साल से अधिक पुराना नहीं होगा ... – Kendrick

+0

हाँ, यह काम नहीं करता है।टाइम्सपैन को "टोटलयर्स" संपत्ति की आवश्यकता होती है :-) – Kendrick

5

this साइट पर वे हैं:

public static int CalculateAge(DateTime BirthDate) 
    { 
     int YearsPassed = DateTime.Now.Year - BirthDate.Year; 
     // Are we before the birth date this year? If so subtract one year from the mix 
     if (DateTime.Now.Month < BirthDate.Month || (DateTime.Now.Month == BirthDate.Month && DateTime.Now.Day < BirthDate.Day)) 
     { 
      YearsPassed--; 
     } 
     return YearsPassed; 
    } 
14

घटाने दो DateTime आप देता है एक TimeSpan वापस। दुर्भाग्यवश, सबसे बड़ी इकाई जो आपको वापस देती है वह दिन है।

जबकि सटीक, आप इसका अनुमान लगा सकता, इस तरह:

int days = (DateTime.Today - DOB).Days; 

//assume 365.25 days per year 
decimal years = days/365.25m; 

संपादित करें: ओह, TotalDays एक डबल, है दिन एक पूर्णांक है।

+0

अच्छा जवाब! मुझे 365.25 के साथ विभाजन के बारे में आश्चर्य है। सिर्फ 365.0 क्यों नहीं है। मैंने पाया कि अन्य विषयों में भी आश्चर्य और आश्चर्य है कि क्या आप मुझे प्रबुद्ध कर सकते हैं। – ppolyzos

+4

.25 लीप साल –

+0

के कारण है, मैंने इसे कुल दिनों के बजाय दिन का उपयोग करने के लिए भी तय किया है। कुल दिन एक डबल, एक int नहीं है। चूंकि हम आंशिक दिनों के बारे में परवाह नहीं करते हैं ... – Powerlord

-3
(DateTime.Now - DOB).TotalDays/365 

एक और दिनांक समय struct से दिनांक समय struct आप एक TimeSpan struct जो संपत्ति TotalDays है दे देंगे घटाने ... तो बस विभाजित 365

+1

प्रत्येक वर्ष 365 दिन नहीं है ... – Rob

4
private static Int32 CalculateAge(DateTime DOB) 
    { 
     DateTime temp = DOB; 
     Int32 age = 0; 
     while ((temp = temp.AddYears(1)) < DateTime.Now) 
      age++; 
     return age; 
    } 
+0

365 तक विभाजित करने से लीप वर्षों को संभाल नहीं आता है और वास्तव में 365.25 तक विभाजित नहीं होता है, वास्तव में लीप वर्षों को सटीक रूप से संभाल नहीं करता है। –

संबंधित मुद्दे