क्या .NET लाइब्रेरी में मंथ के लिए पूर्वनिर्धारित गणन है?


97

मैं यह देखने के लिए देख रहा हूं कि क्या .net ढांचे में महीनों के लिए एक आधिकारिक गणना है।

मेरे लिए यह संभव प्रतीत होता है कि महीने का उपयोग कितना सामान्य है, इस वजह से एक है, और क्योंकि नेट ढाँचे में इस तरह की अन्य गणनाएँ हैं।

उदाहरण के लिए, सप्ताह में कुछ दिनों के लिए गणना होती है, System.DayOfWeek, जिसमें सोमवार, मंगलवार, आदि शामिल हैं।

मुझे आश्चर्य हो रहा है कि क्या साल में कई महीने हैं, यानी जनवरी, फरवरी, आदि?

क्या कोई जानता है?

जवाबों:


118

ऐसा नहीं है, लेकिन अगर आप एक महीने का नाम चाहते हैं, जिसका आप उपयोग कर सकते हैं:

CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName (DateTime.Now.Month);

जो एक स्ट्रिंग प्रतिनिधित्व लौटेगा (चालू माह का, इस मामले में)। ध्यान दें कि GetMonth1 से 13 तक तर्क लेता है - 1 जनवरी है, 13 एक रिक्त स्ट्रिंग है।


11
हालांकि यह एक दुश्मनी नहीं है।
स्कॉट विस्न्यूस्की

3
धन्यवाद, दिलचस्प जवाब, वह नहीं जो मैं ढूंढ रहा था, लेकिन फिर भी एक लायक +!
मार्क रोजर्स

4
मैं संस्कृति विशिष्ट मुद्दे के बारे में सहमत हूं, लेकिन फिर Microsoft ने DayOfWeek क्यों बनाया, यह संस्कृति-विशिष्ट है। मजेदार, हुह?
मार्क रोजर्स

12
शायद इसलिए कि विभिन्न संस्कृतियों में अलग-अलग मासिक कैलेंडर होते हैं, लेकिन वहाँ (जाहिरा तौर पर) एक नहीं है जिसमें प्रति सप्ताह अलग-अलग दिन होते हैं। यदि नाम नहीं हैं तो भी प्रति सप्ताह दिनों की संख्या सुसंगत है ।
1938 में रयान लुंडी

11
यदि आप सांस्कृतिक रूप से संवेदनशील हैं, तो समय यात्रा करने वाले प्रोग्रामर, इस बात से अवगत रहें कि ऐसी संस्कृतियाँ रही हैं जिनके पास एक दशमलव सप्ताह था (जैसे क्रांतिकारी फ्रांस) en.wikipedia.org/wiki/Decimal_calendar
मैथ्यू लॉक

75

नहीं, वहाँ नहीं है।


3
किस बारे में Microsoft.VisualBasic.MonthName?
जोश स्टोडोला

14
आपने क्या उपयोगी उत्तर दिया है। शायद कुछ अतिरिक्त मार्गदर्शन अधिक उपयुक्त होते।
माइकल एकिंस

13
@ guillegr123 आप कैसे सुझाव देंगे कि मैं एक नकारात्मक साबित करने के बारे में जाना?
डेविड नेल्सन

7
शायद यह नकारात्मक साबित नहीं होता है, लेकिन थोड़ा सा तर्क क्रम से बाहर नहीं होगा: कोई दुश्मनी नहीं है क्योंकि दुश्मनी स्थानीय नहीं हो सकती है। महीने। अगर कोई रूसी प्रोग्रामर के लिए कोई मतलब नहीं होता है यह आगे उन कार्यों को देखते हुए समर्थित है, जो महीने के नाम प्रदान करते हैं - वे एक संस्कृति वस्तु पर स्थित हैं।
सैम एक्सिस

8
इस प्रश्न के एकमात्र वास्तविक उत्तर के लिए 10 डाउनवोट का मुकाबला करने के लिए अपवोटिंग। क्या .NET में महीनों के लिए एक आधिकारिक गणना है? नहीं, वहाँ नहीं है। यह बहुत कम समझ में आता है क्योंकि हर कैलेंडर में महीनों की संख्या समान नहीं होती है, और शायद इसीलिए इसे कभी पेश नहीं किया गया है। लेकिन यहाँ वह बात नहीं है। वहाँ एक है? नहीं। प्रश्न सही उत्तर दिया गया।
एस एम

39

मैं यह देखने के लिए देख रहा हूं कि क्या .net ढांचे में महीनों के लिए एक आधिकारिक गणना है।

नहीं।

मैं पहले से ही तैयार है। (सी # संस्करण)

public enum Month
{
    NotSet = 0,
    January = 1,
    February = 2,
    March = 3,
    April = 4,
    May = 5,
    June = 6,
    July = 7,
    August = 8,
    September = 9,
    October = 10,
    November = 11,
    December = 12
}

क्यों उपयोग करें NotSet? सिर्फ शुरुआत ही क्यों January = 1? फिर आप बाकी कामों को भी पूरा कर सकते थे ..
Tersosauros

1
@Tersosauros क्योंकि तब यह डिफ़ॉल्ट होगा January, उदाहरण के लिए, इसका उपयोग एक वर्ग के लिए संपत्ति के रूप में किया जाता है। ज्यादातर मामलों में मुझे नहीं लगता है कि चाहते हैं, मैं चाहता हूँ कि यह एक 'अशक्त' मान है इससे पहले कि यह स्पष्ट रूप से असाइन किया गया है
वाल

1
लेकिन @wal, यदि आप 'null' वैल्यू चाहते हैं, तो आपको अपनी एनम को nullable के रूप में उपयोग करना चाहिए। अपने क्लासेज़ में पब्लिक मंथ का इस्तेमाल करते हैं? महीना {मिलता है; सेट; }।
oteal

7
@Tersosauros ध्यान दें कि 0 हमेशा एक एनम का डिफ़ॉल्ट मान होगा, भले ही इसे स्पष्ट रूप से परिभाषित नहीं किया गया हो। यदि NotSetछोड़ दिया गया है January = 1(और बाकी मूल्य 2, 3, आदि हैं) तो इस (Month)0
एनुम

एक ही बात पोस्ट करने के लिए आया था .. यह जवाब होना चाहिए। Enum का उपयोग सभी DateTime कार्यों अर्थात DateTime.Now.Month == (int) Month.January
Sonic Soul

32

DateTimeFormatInfo.CurrentInfo.MonthNames(एनम नहीं है, लेकिन मुझे लगता है कि DateTimeFormatInfo का करंटइन्फो उदाहरण आप सामान्य रूप से देख रहे हैं)। यदि आप एक ड्रॉप-डाउन सूची चाहते हैं, तो आप इसे इस तरह बना सकते हैं:

List<string> monthNames = DateTimeFormatInfo.CurrentInfo.MonthNames.Take(12).ToList();
var monthSelectList = monthNames.Select(
   m => new { Id = monthNames.IndexOf(m) + 1, Name = m });

1
वापसी करने योग्य। निकला हुआ किनारा (0, 11)। सेलेक्ट (m => नया {Id = महीना + 1, नाम = DateTimeFormatInfo.CurrentInfo.MonthNames [महीना]});
कीथ हैरिसन

var months = Enumerable.Range(0, 11).Select(m => new KeyValuePair<int, string>(m + 1, DateTimeFormatInfo.CurrentInfo.MonthNames[m]));
दान डिपलो

13

इस नामस्थान के enum "MonthNamesType" में एक मिला: Microsoft.ServiceModel.Channels.Mail.ExchangeWebService.Exchange2007

स्थान थोरा डराता है लेकिन यह फिर भी है।


मैं आपको सही उत्तर दूंगा, लेकिन मुझे नहीं लगता कि यह बेस लाइब्रेरी .net फ्रेमवर्क का हिस्सा है। प्रयास और रचनात्मकता के लिए +1।
मार्क रोजर्स

ऐसा लगता है कि यह .net 3.5 का हिस्सा है। बस दृश्य स्टूडियो में ऑब्जेक्ट व्यूअर खोलें और "जनवरी" के लिए खोजें और एपीआई में मैच सामने आएं।
विडालसून

हाँ, जैसा कि आपने सुझाव दिया था, ऐसा लगता है कि यह v3.0 फ़ोल्डर में है, और यह एक डिफ़ॉल्ट लाइब्रेरी नहीं है। इसलिए जब मुझे लगता है कि यह पुस्तकालय में है तो इसका स्थान आदर्श से कम है। यह एक ग्रे क्षेत्र के रूप में सवाल की आवश्यकताओं के रूप में दूर है।
मार्क रोजर्स

+1 सुनिश्चित करने के प्रयास के लिए होगा। हम यहाँ किस बारे में बात कर रहे हैं?
indolentdeveloper

10

क्या आप पूरा करने का प्रयास कर रहे हैं?

यदि आप चाहते हैं कि वर्ष के महीनों के साथ बारह तार हैं, तो यह एक कस्टम प्रारूप स्ट्रिंग के माध्यम से उपलब्ध है - एक डेटाइम के किसी भी उदाहरण के लिए लागू किया जाता है,

  DateTime dt = DateTime.Parse("12 January 2009";
   dt.ToString("MMM");  // prints "Jan" 
                        // (or the right abbrev is in current culture)
   dt.ToString("MMMM"); // prints "January" 
                        // (or correct sp in current culture)

यदि आप किसी अन्य ऑब्जेक्ट प्रकार की गणना की गई संपत्ति के रूप में महीने को निर्दिष्ट करने में सक्षम होना चाहते हैं, तो डेटटाइम फ़ील्ड की महीने की संपत्ति 1 से 12 तक पूर्णांक देती है ...


1
आपके उत्तर के लिए धन्यवाद, मैं बस उत्सुक हूं अगर कोई आधिकारिक गणना है, क्योंकि मैं एक बनाने वाला हूं और मैं यह जानना चाहूंगा कि क्या कोई ऐसा है जो पहले से मौजूद है, इसलिए मैं एक अनावश्यक गणना को फिर से परिभाषित नहीं करता हूं ।
मार्क रोजर्स

1
कोई afaik, कोई भी नहीं है, (यदि आप एक बनाते हैं, तो मैं पूर्णांक मानों को स्पष्ट कर दूंगा, सोप आप यह सुनिश्चित कर सकते हैं कि 1-12 मानों के रूप में एक ही उपयोग किया जाता है। महीने का प्रतिनिधित्व करने के लिए .Net द्वारा उपयोग किया जाता है)
चार्ल्स

3

हाँ, वहाँ निश्चित रूप से है। यह Microsoft.VisualBasic नामस्थान का हिस्सा है ...

Microsoft.VisualBasic.MonthName

और आप में से जिन लोगों को इस नाम स्थान की समस्या है, आपको समझना चाहिए कि यह वास्तव में .NET है, और यह कहीं नहीं जा रहा है

रिकॉर्ड के लिए, MonthNameफ़ंक्शन आंतरिक रूप से निम्नलिखित कॉल करता है ...

Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName

1
क्षमा करें, लेकिन इस उत्तर में पिछले उत्तर के समान ही समस्या है, क्योंकि यह कोई गणना नहीं है, जो इस प्रश्न का विषय है। फिर भी, जानकारी के लिए धन्यवाद।
मार्क रोजर्स

@Mark: System.Globalization.DateTimeFormatInfo.CurrentInfo.MonthNames एक स्ट्रिंग है [] जो IEnumerable है।
user169771

1
@ user169771 - string [] एक है, IEnumerableलेकिन इसका enumeration नहीं है । तो यह काम नहीं करता है।
मार्क रोजर्स

2

कुछ कैलेंडर वास्तव में 12 महीने से अधिक होते हैं: http://en.wikipedia.org/wiki/Month लेकिन मैं यह नहीं कह सकता कि यदि यह कारण था कि MS ने .NET में एनम नहीं बनाया था।

मेरे जैसे आलसी के लिए जो VB में कॉपी / पेस्ट पसंद करता होगा:

Public Enum MonthsOfYear
    January = 1
    February = 2
    March = 3
    April = 4
    May = 5
    June = 6
    July = 7
    August = 8
    September = 9
    October = 10
    November = 11
    December = 12
End Enum

1

मुझे यकीन नहीं है, लेकिन मेरा कूबड़ नहीं है। DateTime.Month एक पूर्णांक देता है। अगर इस तरह की गणना होती, तो संभवत: इसे डेटाइम द्वारा वापस कर दिया जाता।


1

मैं कुछ इस तरह के साथ कोड के लिए देख रहा हूँ, के रूप में

        if (DateTime.Now.Month != 1) // can't run this test in January.

इसमें यह मैजिक नंबर 1 है। जहाँ तक

        if (DateTime.Now.Month != DateTime.MonthsOfYear.January) 

स्व-दस्तावेज है


0

एक एनम बल्कि उपयोगी होगा, लेकिन आप एक प्रारूप के साथ वांछित परिणाम प्राप्त कर सकते हैं:

DateTime myDateTimeObject=DateTime.Now; //(for example)
string monthName = myDateTimeObject.ToString("MMMM");

यह पूरे महीने का नाम (जनवरी, फरवरी, आदि) लौटाता है। myDateTimeObject.ToString("MMM")संक्षिप्त नाम (जनवरी, फरवरी, मार्च, आदि) के लिए उपयोग करें ।

यदि आपके पास एक विशेष महीने की संख्या है, mnthNumबिना किसी के DateTime, आप हमेशा कुछ इस तरह का उपयोग कर सकते हैं:

string monthName=(new DateTime(2000,mnthNum,1)).ToString("MMMM");

या

string monthName=((new DateTime(2000,1,1)).AddMonths(mnthNum-1)ToString("MMMM");

लेकिन यह थोड़ा गड़बड़ लगता है। पहले उदाहरण के लिए mnthNum1 से 12 के बीच की आवश्यकता होती है । दूसरा उदाहरण किसी भी महीने की संख्या के लिए (लगभग) 1 से 12 तक सीमित नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.