NSDate को NSString में बदलें


252

मैं कैसे परिवर्तित करते हैं, NSDateकरने के लिए NSStringमें इतना है कि केवल साल @ "yyyy" प्रारूप स्ट्रिंग के लिए उत्पादन है?

जवाबों:


468

कैसा रहेगा...

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy"];

//Optionally for time zone conversions
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]];

NSString *stringFromDate = [formatter stringFromDate:myNSDateInstance];

//unless ARC is active
[formatter release];

स्विफ्ट 4.2:

func stringFromDate(_ date: Date) -> String {
    let formatter = DateFormatter()
    formatter.dateFormat = "dd MMM yyyy HH:mm" //yyyy
    return formatter.string(from: date)
}

24
यह मेमोरी रिसाव उत्पन्न करेगा, क्योंकि फॉर्मैटर कभी भी रिलीज़ नहीं होता है।
माने

6
के initसाथ प्रयोग न करें NSDateFormatter। इसे iOS 3.2 के बाद हटा दिया गया था । (और यदि आप इसके बजाय एक वर्ग विधि का उपयोग करते हैं, तो यह ऑटोरेलिज़ होगा और आपको रिसाव की समस्या भी नहीं होगी।)
zekel

3
वास्तव में स्थानीयकृत
StringFromDate

4
@ ज़ेकेल मुझे यकीन नहीं है कि प्रलेखन क्या कहता था, लेकिन अब यह initकई स्थानों पर सुझाव देता है।
नील एहार्द

2
मैंने इसे (3 साल पहले) ऑटोरिलिज्ड किया होगा
एडम वेट

283

मुझे नहीं पता कि हम सब कैसे चूक गए: स्थानीयकृत स्ट्रिंगफ्रॉमडेट: तारीख: समय: समय:

NSString *dateString = [NSDateFormatter localizedStringFromDate:[NSDate date] 
                                                      dateStyle:NSDateFormatterShortStyle 
                                                      timeStyle:NSDateFormatterFullStyle];
NSLog(@"%@",dateString);

आउटपुट '13 / 06/12 00:22:39 GMT + 03: 00 '


एक बार एक स्ट्रिंग के लिए बाहर लिखा है, वहाँ इस तरह से इसे पढ़ने के लिए एक अच्छा साफ तरीका है? (उन NSDateFormatter enums का उपयोग करके)
Fonix

@Fonix मुझे ऐसा नहीं लगता - यह एक स्थानीयकृत स्ट्रिंग है, जिसका अर्थ है कि यह उपयोगकर्ता की स्थानीय सेटिंग्स पर निर्भर करता है। आपको कभी भी इस तरह से प्रारूप में तारीखों को संग्रहीत नहीं करना चाहिए क्योंकि सेटिंग्स किसी भी समय बदल सकती हैं।
विक्टर बेनेई

इसका अच्छा है अगर आप फॉर्मेटर का उपयोग दुर्लभ है। अन्यथा आपको कैश की आवश्यकता है।
माइक ग्लूखोव

स्विफ्ट में: dateString = NSDateFormatter.localizedStringFromDate (तारीख, तारीख अंदाज़: शार्टसाइल, टाइम स्टाइल: .FullStyle);
क्रिस्टन

1
कोड की संख्या कम कर दी है और इसके सही काम के लिए धन्यवाद
प्रीथा

87

समय के साथ वर्ष, महीना और दिन सहित सामान्य फॉर्मेटर प्रदान करके अधिक मूल्य जोड़ने की उम्मीद है। आप इस फ़ॉर्मेटर का उपयोग केवल एक वर्ष से अधिक समय तक कर सकते हैं

[dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"]; 

24

NSDateवेब पर कई हेल्पर्स हैं, मैं उपयोग करता हूं:

https://github.com/billymeltdown/nsdate-helper/

नीचे पढ़ें विवरण:

  NSString *displayString = [NSDate stringForDisplayFromDate:date];

यह निम्न प्रकार के आउटपुट का उत्पादन करता है:

3:42 AM  if the date is after midnight today
Tuesday  if the date is within the last seven days
Mar 1  if the date is within the current calendar year
Mar 1, 2008  else ;-)

यह निश्चित रूप से एक महान समाधान है। आपको इस बात की चिंता करने की ज़रूरत नहीं है कि आप अपनी तिथियों को कैसे देखना चाहते हैं, और कोडिंग के साथ प्राप्त कर सकते हैं। :)
kyleturner

13

स्विफ्ट में:

var formatter = NSDateFormatter()
formatter.dateFormat = "yyyy"
var dateString = formatter.stringFromDate(YourNSDateInstanceHERE)

स्विफ्ट 3.0 में फ़ॉर्मेटर = DateFormatter () फ़ॉर्मेटर.dateFormat = "yyyy" रिटर्न फ़ॉर्मटर.स्ट्रिंग (से: दिनांक)
विक्टर लेरटे

8
  NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
  [dateformate setDateFormat:@"yyyy"]; // Date formater
  NSString *date = [dateformate stringFromDate:[NSDate date]]; // Convert date to string
  NSLog(@"date :%@",date);

1
"YYYY" चालू सप्ताह के लिए वर्ष देता है दिन नहीं। इसके बजाय "yyyy" का उपयोग करें। अधिक जानकारी के लिए इस SO प्रश्न को देखें। stackoverflow.com/questions/15133549/…
स्टीव मोजर

धन्यवाद स्टीव मोजर :)
एसआर नायक

4

यदि आपके पास NSDate -descriptionWithCalendarFormat:timeZone:locale:उपलब्ध नहीं है (मुझे विश्वास नहीं है कि iPhone / कोको टच में यह शामिल है) तो आपको कुछ सी-स्टाइल स्ट्रिंग्स के साथ स्ट्रैफ़ाइम और बंदर का उपयोग करने की आवश्यकता हो सकती है। आप एक NSDateउपयोग से UNIX टाइमस्टैम्प प्राप्त कर सकते हैं NSDate -timeIntervalSince1970


4
+(NSString*)date2str:(NSDate*)myNSDateInstance onlyDate:(BOOL)onlyDate{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    if (onlyDate) {
        [formatter setDateFormat:@"yyyy-MM-dd"];
    }else{
        [formatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
    }

    //Optionally for time zone conversions
    //   [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]];

    NSString *stringFromDate = [formatter stringFromDate:myNSDateInstance];
    return stringFromDate;
}

+(NSDate*)str2date:(NSString*)dateStr{
    if ([dateStr isKindOfClass:[NSDate class]]) {
        return (NSDate*)dateStr;
    }

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyy-MM-dd"];
    NSDate *date = [dateFormat dateFromString:dateStr];
    return date;
}


2

यदि आप Mac OS X पर हैं तो आप लिख सकते हैं:

NSString* s = [[NSDate date] descriptionWithCalendarFormat:@"%Y_%m_%d_%H_%M_%S" timeZone:nil locale:nil];

हालाँकि यह iOS पर उपलब्ध नहीं है।


1

तेजी से 4 जवाब

static let dateformat: String = "yyyy-MM-dd'T'HH:mm:ss"
public static func stringTodate(strDate : String) -> Date
{

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateformat
    let date = dateFormatter.date(from: strDate)
    return date!
}
public static func dateToString(inputdate : Date) -> String
{

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateformat
    return formatter.string(from: inputdate)

}

0
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:myNSDateInstance];
NSInteger year = [components year];
// NSInteger month = [components month];
NSString *yearStr = [NSString stringWithFormat:@"%ld", year];

0

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

NSString * stringFromDate(NSDate *date)  
 {   NSDateFormatter *formatter
    [[NSDateFormatter alloc] init];  
    [formatter setDateFormat:@"MM ∕ dd ∕ yyyy, hh꞉mm a"];    
    return [formatter stringFromDate:date]; 
}

0

यह तेज प्रारूप है:

func dateFormatterWithCalendar(calndarIdentifier: Calendar.Identifier, dateFormat: String) -> DateFormatter {

    let formatter = DateFormatter()
    formatter.calendar = Calendar(identifier: calndarIdentifier)
    formatter.dateFormat = dateFormat

    return formatter
}


//Usage
let date = Date()
let fotmatter = dateFormatterWithCalendar(calndarIdentifier: .gregorian, dateFormat: "yyyy")
let dateString = fotmatter.string(from: date)
print(dateString) //2018
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.