iOS: किसी संख्या से एक उचित माह का नाम कैसे प्राप्त करें?


86

मुझे पता है कि NSDateformatter suite of कार्यक्षमता मानव जाति के लिए एक वरदान है, लेकिन साथ ही यह मेरे लिए बहुत भ्रामक है। मुझे आशा है कि आपके द्वारा मेरी सहायता की जा सकती है।

कहीं मेरे कोड में, एक महीने का प्रतिनिधित्व करने का एक इंट है। तो: 1 जनवरी, 2 फरवरी, आदि होगा।

अपने यूजर इंटरफेस में, मैं इस पूर्णांक को उचित महीने के नाम के रूप में प्रदर्शित करना चाहूंगा। इसके अलावा, यह डिवाइस के स्थान का पालन करना चाहिए।

आपकी जानकारी के लिए धन्यवाद

इस बीच में, मैंने निम्नलिखित कार्य किए हैं:

int monthNumber = 11
NSString * dateString = [NSString stringWithFormat: @"%d", monthNumber];

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM"];
NSDate* myDate = [dateFormatter dateFromString:dateString];
[dateFormatter release];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMMM"];
NSString *stringFromDate = [formatter stringFromDate:myDate];
[formatter release];

क्या ऐसा करने का तरीका है? यह थोड़ा चिंताजनक है।


1
आप MMLM को LLLL
पीटर स्टैजर

जवाबों:


162

एक अन्य विकल्प माहसमूह विधि का उपयोग करना है:

int monthNumber = 11;   //November
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
NSString *monthName = [[df monthSymbols] objectAtIndex:(monthNumber-1)];

ध्यान दें कि आपको अपने 1..12 महीने से 1 को घटाना होगा। महीने के बाद से स्नोबॉल शून्य-आधारित है।


2
महीने के लिए दस्तावेज: प्रतीक: डेवलपर.
apple.com/library/mac/#documentation/Cocoa/Reference/…

14
यह वास्तव में केवल अंग्रेजी लोकेल (और इसी तरह की भाषाओं) के साथ काम करता है। यह उन भाषाओं के लिए स्थानों के साथ काम नहीं करता है जो मामलों का उपयोग करते हैं, उदाहरण के लिए स्लाव भाषा। standaloneMonthSymbolsउपयोग किया जाना चाहिए।
सुल्तान

5
सरलीकरण:NSString *monthName = [[[NSDateFormatter alloc] init] monthSymbols][monthNumber-1];
जोहान्स फारेनक्रग

7
कृपया, स्टैंडअलोनमाउथसिमबल्स
रोमन ट्रूबा

1
का प्रयोग करें [df shortMonthSymbols]अगर आप कम महीने के नाम (जन, फर ...) चाहते हैं।
शोभित सी

36

स्विफ्ट 2.0

let monthName = NSDateFormatter().monthSymbols[monthNumber - 1]

स्विफ्ट 4.0

let monthName = DateFormatter().monthSymbols[monthNumber - 1]

24

आप NSDateFormatter की तारीख को बदल सकते हैं। तो अपने कोड को सरल बनाने के लिए:

int monthNumber = 11
NSString * dateString = [NSString stringWithFormat: @"%d", monthNumber];

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM"];
NSDate* myDate = [dateFormatter dateFromString:dateString];

[formatter setDateFormat:@"MMMM"];
NSString *stringFromDate = [formatter stringFromDate:myDate];
[dateFormatter release];

एक बार जब आप डेट फ़ॉर्मेटर को इनवॉइस करते हैं, तो आपको लोकेल भी सेट करना चाहिए।

dateFormatter.locale = [NSLocale currentLocale]; // Or any other locale

उम्मीद है की यह मदद करेगा


13

इसके लिए सबसे अच्छा उपाय है, standaloneMonthSymbolsविधि,

-(NSString*)MonthNameString:(int)monthNumber
{
    NSDateFormatter *formate = [NSDateFormatter new];

    NSArray *monthNames = [formate standaloneMonthSymbols];

    NSString *monthName = [monthNames objectAtIndex:(monthNumber - 1)];

    return monthName;
}

10

कैसा रहेगा:

NSUInteger i = <your month integer>;
NSDateFormatter *df = [NSDateFormatter new];
// change locale if the standard is not what you want
NSArray *monthNames = [df standaloneMonthSymbols];
NSString *monthName = [monthNames objectAtIndex:(i - 1)];
[df release];

8

एना करिनाना और कार्ल के दोनों जवाबों से काम नहीं चलता है और साथ ही वे कुछ संस्कृतियों के लिए नोमिनातिव में महीने का नाम नहीं देंगे। मैं पास्कल से प्रस्तावित समाधान का उपयोग करने का सुझाव देता हूं, जो इस मुद्दे को हल करता है (के monthSymbolsसाथ प्रतिस्थापित करके standaloneMonthSymbols)


6

स्विफ्ट 3.0 में

    let monthNumber = 3
    let fmt = DateFormatter()
    fmt.dateFormat = "MM"
    let month = fmt.monthSymbols[monthNumber - 1]
    print(month)

    // result
   "March\n"        

2
standaloneMonthSymbolsकुछ भाषाओं में सही मामले के लिए उपयोग करने के लिए बेहतर है
Gleb Tarasov

6

स्विफ्ट 4.X

print((DateFormatter().monthSymbols[month-1].capitalized)) //month is int less than 12

उदाहरण के लिए:

print((DateFormatter().monthSymbols[11-1].capitalized))

उत्पादन

नवंबर


3

NSString करने के लिए NSDate -> के रूप में DateFormat पूर्व: 2015/06/24

        NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
        [dateformate setDateFormat: @"yyyy/MM/dd"];
        NSString *date = [dateformate stringFromDate:selectedDate]; // Convert date to string

NSDate to NSString -> एज़ डेटफॉर्मेट Ex: 2015 24 जून, दोपहर 1:02 बजे

        [dateformate setDateFormat:@"yyyy MMMM dd, h:mm a"];
        NSString *displayDate = [dateformate stringFromDate:selectedDate]; // Convert date to string
        NSLog(@"date :%@",date);
        NSLog(@"Display time = %@", displayDate);

1

और एआरसी के साथ:

+ (NSString *)monthNameFromDate:(NSDate *)date {
    if (!date) return @"n/a";
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"MM"];
    return [[df monthSymbols] objectAtIndex:([[df stringFromDate:date] integerValue] - 1)];
}

0

आप कुछ पंक्तियों को काटते हुए, डेटफ़ॉर्मर के रिलीज़ और पुनः आवंटन से छुटकारा पाने में सक्षम होना चाहिए, लेकिन यह सब मुझे दिखाई देता है।

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