मैं सप्ताह के दिन को फाउंडेशन के साथ कैसे प्राप्त करूं?


जवाबों:


216
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];  
[dateFormatter setDateFormat:@"EEEE"];
NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]);

वर्तमान क्षेत्रीय सेटिंग्स पर निर्भर लोकेल में एक स्ट्रिंग के रूप में सप्ताह के वर्तमान दिन को आउटपुट करता है।

केवल एक सप्ताह के दिन की संख्या प्राप्त करने के लिए आपको NSCalendar वर्ग का उपयोग करना होगा:

NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
int weekday = [comps weekday];

14
और उन सभी कार्यदिवसों के नाम प्राप्त करने के लिए जिनका आप उपयोग कर सकते हैं [dateFormatter weekdaySymbols](और इसी तरह के), जो
एनएएसट्रेस का एक एनएसएरे्रस

ठीक है, मैं सप्ताह का दिन सोमवार से कैसे शुरू करूं, रविवार के साथ नहीं?
व्लादिमीर स्टाज़िलोव

2
@VovaStajilov शायद यह सवाल: stackoverflow.com/questions/1106943/… मदद करेगा। मूल रूप से आपको कैलेंडर का पहला सप्ताह निर्धारित करने की आवश्यकता है सोमवार ([कैलेंडर setFirstWeekday: 2])
व्लादिमीर

1
पहला NSLog 475221968 देता है जो सप्ताह के दिन के लिए अवास्तविक, विशाल संख्या है। । ।
coolcool1994

ठीक है, @Vladimir, मैं सेट [gregorian setFirstWeekday:2];और सोमवार के लिए 01/06/2015 मैं 2 ( [components weekday]) प्राप्त करता हूं । क्यों? - मुझे यहाँ
new2ios

18

बस इन तीन लाइनों का उपयोग करें:

CFAbsoluteTime at = CFAbsoluteTimeGetCurrent();
CFTimeZoneRef tz = CFTimeZoneCopySystem();
SInt32 WeekdayNumber = CFAbsoluteTimeGetDayOfWeek(at, tz);

3
मुझे यह पसंद है, लेकिन यह लगभग कुछ नए डेवलपर्स (जो एक दुष्ट बोनस हो सकता है) के लिए
दुविधा के

3
CFAbsoluteTimeGetDayOfWeek को iOS 8 में दर्शाया गया है। क्या CFCenderender का उपयोग करने का कोई वैकल्पिक तरीका है?
जॉर्डन स्मिथ

15

यहाँ बहुत से उत्तर हटाए गए हैं। यह iOS 8.4 के रूप में काम करता है और आपको सप्ताह के दिन को एक स्ट्रिंग के रूप में और एक नंबर के रूप में देता है।

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEEE"];
NSLog(@"The day of the week: %@", [dateFormatter stringFromDate:[NSDate date]]);

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *comps = [gregorian components:NSCalendarUnitWeekday fromDate:[NSDate date]];
int weekday = [comps weekday];
NSLog(@"The week day number: %d", weekday);

1
एक साइड नोट के रूप में - क्योंकि weekdayघटक NSCalendarएक है NSInteger, इसलिए आपको जरूरत पड़ने पर कास्ट [comps weekday]करने की intआवश्यकता होगी, या अन्यथा यह इस बारे में चेतावनी दिखाएगा।
मैलोडन

10

यहाँ आप इसे स्विफ्ट 3 में कैसे करते हैं, और एक स्थानीय दिन का नाम प्राप्त करें ...

let dayNumber = Calendar.current.component(.weekday, from: Date()) // 1 - 7
let dayName = DateFormatter().weekdaySymbols[dayNumber - 1]

स्विफ्ट 3 में, NSCalendar के बजाय कैलेंडर का उपयोग किया जाना चाहिए।
जवारेला

7
-(void)getdate {
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyy-MM-dd"];
    NSDateFormatter *format = [[NSDateFormatter alloc] init];
    [format setDateFormat:@"MMM dd, yyyy HH:mm"];
    NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
    [timeFormat setDateFormat:@"HH:mm:ss"];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init] ;
    [dateFormatter setDateFormat:@"EEEE"];

    NSDate *now = [[NSDate alloc] init];
    NSString *dateString = [format stringFromDate:now];
    NSString *theDate = [dateFormat stringFromDate:now];
    NSString *theTime = [timeFormat stringFromDate:now];

    NSString *week = [dateFormatter stringFromDate:now];
    NSLog(@"\n"
          "theDate: |%@| \n"
          "theTime: |%@| \n"
          "Now: |%@| \n"
          "Week: |%@| \n"
         , theDate, theTime,dateString,week); 
}

3

मुझे सप्ताह के सूचकांक के एक सरल (ग्रेगोरियन) दिन की आवश्यकता थी, जहां पैटर्न मैच एल्गोरिदम में 0 = रविवार और 6 = शनिवार का उपयोग किया जाना था। वहां से सूचकांक का उपयोग करके एक सरणी से दिन के नाम को देखने का एक सरल मामला है। यहाँ मैं तारीख सूत्रकारों, या NSCalendar या दिनांक घटक हेरफेर की आवश्यकता नहीं है के साथ आया है:

+(long)dayOfWeek:(NSDate *)anyDate {
    //calculate number of days since reference date jan 1, 01
    NSTimeInterval utcoffset = [[NSTimeZone localTimeZone] secondsFromGMT];
    NSTimeInterval interval = ([anyDate timeIntervalSinceReferenceDate]+utcoffset)/(60.0*60.0*24.0);
    //mod 7 the number of days to identify day index
    long dayix=((long)interval+8) % 7;
    return dayix;
}

2

यहां स्विफ्ट 3 के लिए अपडेटेड कोड है

कोड:

let calendar = Calendar(identifier: .gregorian)

let weekdayAsInteger = calendar.component(.weekday, from: Date())

स्ट्रिंग के रूप में घटना का नाम प्रिंट करने के लिए:

 let dateFromat = DateFormatter()

datFormat.dateFormat = "EEEE"

let name = datFormat.string(from: Date())

2

मुझे लगता है कि यह विषय वास्तव में उपयोगी है, इसलिए मैं कुछ कोड स्विफ्ट 2.1 संगत पोस्ट करता हूं ।

extension NSDate {

    static func getBeautyToday() -> String {
       let now = NSDate()
       let dateFormatter = NSDateFormatter()
       dateFormatter.dateFormat = "EEEE',' dd MMMM"
       return dateFormatter.stringFromDate(now)
    }

}

कहीं भी आप कॉल कर सकते हैं:

let today = NSDate.getBeautyToday()
print(today) ---> "Monday, 14 December"

स्विफ्ट 3.0

जैसा कि @ delta2flat ने सुझाव दिया है, मैं उपयोगकर्ता को कस्टम प्रारूप निर्दिष्ट करने की क्षमता देने वाले उत्तर को अपडेट करता हूं।

extension NSDate {

    static func getBeautyToday(format: String = "EEEE',' dd MMMM") -> String {
        let now = Date()
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        return dateFormatter.string(from: now)
    }

}

क्या यह स्थानीय है? क्या होगा यदि आपका इरादा देश "14 दिसंबर, सोमवार" या "14 सोमवार दिसंबर" का उपयोग करना चाहता है? इसमें संभाला जाना चाहिए
delta2flat

हाय @ delta2flat हां, प्रारूप स्थानीय है। Btw मैंने अद्यतन उत्तर दिया है: अब उपयोगकर्ता कस्टम प्रारूप निर्दिष्ट कर सकते हैं
Luca Davanzo

महान - मैंने पाया है कि ऑब्जेक्टिव-सी / कोको टच लोकल फ्लुइडली के अनुसार स्ट्रिंग्स को स्थानीय बनाने के साथ बहुत शक्तिशाली है।
delta2flat

आपका स्विफ्ट तीन एक्सटेंशन NSDate नहीं दिनांक तक होना चाहिए।
लियोन

1

व्लादिमीर के जवाब ने मेरे लिए अच्छा काम किया, लेकिन मुझे लगा कि मैं तारीख प्रारूप के तार के लिए यूनिकोड लिंक पोस्ट करूंगा।

http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns

यह लिंक आईओएस 6 के लिए है। आईओएस के अन्य संस्करणों में अलग-अलग मानक हैं जो एक्स-कोड प्रलेखन में पाए जा सकते हैं।


1

इस तरह यह स्विफ्ट में काम करता है:

    let calendar = NSCalendar.currentCalendar()
    let weekday = calendar.component(.CalendarUnitWeekday, fromDate: NSDate())

फिर कार्यदिवस को परिणामी संख्याओं को निर्दिष्ट करें।


1
NSDate () GMT + 0 के लिए सही तारीख देता है? आप यहाँ उदाहरण के लिए NSDate का उपयोग करते हैं, या कैलेंडर घटक स्वचालित रूप से वर्तमान स्थान और समय शिफ्ट का पता लगाएगा?
दीमा डेपलोव

0

सप्ताह का एक दिन प्राप्त करने के साथ मेरे पास काफी अजीब मुद्दा था। केवल पहले दिन की सेटिंग ही पर्याप्त नहीं थी। टाइम ज़ोन सेट करने के लिए यह भी necesarry था। मेरा कार्य समाधान था:

 NSCalendar* cal = [NSCalendar currentCalendar];
 [cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
 [cal setFirstWeekday:1]; //Sunday
 NSDateComponents* comp = [cal components:( NSWeekOfMonthCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSWeekCalendarUnit)  fromDate:date];
 return [comp weekday]  ;


0
self.dateTimeFormatter = [[NSDateFormatter alloc] init];
self.dateTimeFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; // your timezone
self.dateTimeFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"zh_CN"]; // your locale
self.dateTimeFormatter.dateFormat = @"ccc MM-dd mm:ss";

सप्ताह के दिन को प्रारूपित करने के लिए हम तीन प्रतीकों का उपयोग कर सकते हैं:

  • सी

निम्नलिखित दो दस्तावेज़ आपकी मदद कर सकते हैं।

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html

http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns

डेमो:

आप इस वेबसाइट पर अपने पैटर्न का परीक्षण कर सकते हैं:

http://nsdateformatter.com/

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