首页 文章

将NSString转换为NSDate(并再次返回)

提问于
浏览
219

我如何将 NSString 像“ 01/02/10 ”(意思是2010年2月1日)转换为 NSDate ?我怎么能把 NSDate 变回一个字符串?

17 回答

  • 1

    Swift 4及更高版本

    更新:2018年

    String to Date

    var dateString = "02-03-2017"
    var dateFormatter = DateFormatter()
    
    // This is important - we set our input date format to match our input string
    // if the format doesn't match you'll get nil from your string, so be careful
    dateFormatter.dateFormat = "dd-MM-yyyy"
    
    //`date(from:)` returns an optional so make sure you unwrap when using. 
    var dateFromString: Date? = dateFormatter.date(from: dateString)
    

    Date to String

    var formatter = DateFormatter()
    formatter.dateFormat = "dd-MM-yyyy"
    guard let unwrappedDate = dateFromString else { return }
    
    //Using the dateFromString variable from before. 
    let stringDate: String = formatter.string(from: dateFromString)
    

    斯威夫特3

    更新时间:2017年7月20日

    String to NSDate

    var dateString = "02-03-2017"
    var dateFormatter = DateFormatter()
    // This is important - we set our input date format to match our input string
    // if the format doesn't match you'll get nil from your string, so be careful
    dateFormatter.dateFormat = "dd-MM-yyyy"
    var dateFromString = dateFormatter.date(from: dateString)
    

    NSDate to String

    var formatter = DateFormatter()
    formatter.dateFormat = "dd-MM-yyyy"
    let stringDate: String = formatter.string(from: dateFromString)
    

    斯威夫特

    更新时间:2015年10月22日

    String to NSDate

    var dateString = "01-02-2010"
    var dateFormatter = NSDateFormatter()
    // this is imporant - we set our input date format to match our input string
    dateFormatter.dateFormat = "dd-MM-yyyy"
    // voila!
    var dateFromString = dateFormatter.dateFromString(dateString)
    

    NSDate to String

    var formatter = NSDateFormatter()
    formatter.dateFormat = "dd-MM-yyyy"
    let stringDate: String = formatter.stringFromDate(NSDate())
    println(stringDate)
    

    Objective-C

    NSString to NSDate

    NSString *dateString = @"01-02-2010";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy"];
    NSDate *dateFromString = [dateFormatter dateFromString:dateString];
    

    NSDate convert to NSString:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy"];
    NSString *stringDate = [dateFormatter stringFromDate:[NSDate date]];
    NSLog(@"%@", stringDate);
    
  • 1

    做了 NSString extension .

    // Simple as this.   
    date = dateString.dateValue;
    

    感谢NSDataDetector,它识别了很多格式 .

    '2014-01-16' dateValue is <2014-01-16 11:00:00 +0000>
    '2014.01.16' dateValue is <2014-01-16 11:00:00 +0000>
    '2014/01/16' dateValue is <2014-01-16 11:00:00 +0000>
    '2014 Jan 16' dateValue is <2014-01-16 11:00:00 +0000>
    '2014 Jan 16th' dateValue is <2014-01-16 11:00:00 +0000>
    '20140116' dateValue is <2014-01-16 11:00:00 +0000>
    '01-16-2014' dateValue is <2014-01-16 11:00:00 +0000>
    '01.16.2014' dateValue is <2014-01-16 11:00:00 +0000>
    '01/16/2014' dateValue is <2014-01-16 11:00:00 +0000>
    '16 January 2014' dateValue is <2014-01-16 11:00:00 +0000>
    '01-16-2014 17:05:05' dateValue is <2014-01-16 16:05:05 +0000>
    '01-16-2014 T 17:05:05 UTC' dateValue is <2014-01-16 17:05:05 +0000>
    '17:05, 1 January 2014 (UTC)' dateValue is <2014-01-01 16:05:00 +0000>
    

    部分eppz!kit,从GitHub获取类别NSString+EPPZKit.h .


    原始答案:您是否关心字符串中包含的日期格式 use NSDataDetector for parsing date .

    //Role players.
    NSString *dateString = @"Wed, 03 Jul 2013 02:16:02 -0700";
    __block NSDate *detectedDate;
    
    //Detect.
    NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingAllTypes error:nil];
    [detector enumerateMatchesInString:dateString
                               options:kNilOptions
                                 range:NSMakeRange(0, [dateString length])
                            usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop)
    { detectedDate = result.date; }];
    
  • 51

    使用固定格式日期时,您需要将日期格式化程序区域设置为 "en_US_POSIX" .

    取自Data Formatting Guide

    如果您使用的是固定格式的日期,则应首先将日期格式化程序的区域设置设置为适合您的固定格式的区域设置 . 在大多数情况下,最佳选择的语言环境是en_US_POSIX,这是一种专门设计用于产生美国英语结果的语言环境,无论用户和系统偏好如何 . en_US_POSIX在时间上也是不变的(如果美国,在未来的某个时刻,它会改变格式化日期的方式,en_US将改变以反映新行为,但en_US_POSIX将不会),以及平台之间(en_US_POSIX在iPhone上的工作方式相同)操作系统与OS X上的操作系统一样,并且与其他平台上的操作系统相同 .

    Swift 3 or later

    extension Formatter {
        static let customDate: DateFormatter = {
            let formatter = DateFormatter()
            formatter.locale = Locale(identifier: "en_US_POSIX")
            formatter.dateFormat = "dd/MM/yy"
            return formatter
        }()
        static let time: DateFormatter = {
            let formatter = DateFormatter()
            formatter.locale = Locale(identifier: "en_US_POSIX")
            formatter.dateFormat = "HH:mm"
            return formatter
        }()
        static let weekdayName: DateFormatter = {
            let formatter = DateFormatter()
            formatter.dateFormat = "cccc"
            return formatter
        }()
        static let month: DateFormatter = {
            let formatter = DateFormatter()
            formatter.dateFormat = "LLLL"
            return formatter
        }()
    }
    

    extension Date {
        var customDate: String {
            return Formatter.customDate.string(from: self)
        }
        var customTime: String {
            return Formatter.time.string(from: self)
        }
        var weekdayName: String {
            return Formatter.weekdayName.string(from: self)
        }
        var monthName: String {
            return Formatter.month.string(from: self)
        }
    }
    
    extension String {
        var customDate: Date? {
            return Formatter.customDate.date(from: self)
        }
    }
    

    用法:

    // this will be displayed like this regardless of the user and system preferences
    Date().customTime          //  "16:50"
    Date().customDate          //  "06/05/17"
    // this will be displayed according to user and system preferences
    Date().weekdayName         //  "Saturday"
    Date().monthName           //  "May"
    

    解析自定义日期并将日期转换回相同的字符串格式:

    let dateString = "01/02/10"
    
    if let date = dateString.customDate {
        print(date.customDate)   // "01/02/10\n"
        print(date.monthName)    // customDate
    }
    

    在这里,您可以使用所有元素来根据需要自定义它:

    enter image description here

  • 31

    为什么不向NSString添加类别?

    // NSString+Date.h
    @interface NSString (Date)
    + (NSDate*)stringDateFromString:(NSString*)string;
    + (NSString*)stringDateFromDate:(NSDate*)date;
    @end
    
    
    // NSString+Date.m
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"];
    
    NSDate *date = [dateFormatter dateFromString:stringDate ];
    [dateFormatter release];
    + (NSDateFormatter*)stringDateFormatter
    {
        static NSDateFormatter* formatter = nil;
        if (formatter == nil)
        {
            formatter = [[NSDateFormatter alloc] init];
            [formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"];
        }   
        return formatter;
    }
    
    + (NSDate*)stringDateFromString:(NSString*)string
    {
        return [[NSString stringDateFormatter] dateFromString:string];
    }
    
    + (NSString*)stringDateFromDate:(NSDate*)date
    {
        return [[NSString stringDateFormatter] stringFromDate:date];
    }
    
    
    // Usage (#import "NSString+Date.h") or add in "YOUR PROJECT".pch file
    NSString* string = [NSString stringDateFromDate:[NSDate date]];
    NSDate* date = [NSString stringDateFromString:string];
    
  • 0

    使用“10”代表一年并不好,因为它可能是1910年,1810年等 . 你可能应该使用4位数 .

    如果你可以改变日期

    yyyymmdd
    

    然后你可以使用:

    // Convert string to date object
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyyMMdd"];
    NSDate *date = [dateFormat dateFromString:dateStr];  
    
    // Convert date object to desired output format
    [dateFormat setDateFormat:@"EEEE MMMM d, YYYY"];
    dateStr = [dateFormat stringFromDate:date];  
    [dateFormat release];
    
  • 1
    NSString *dateStr = @"Tue, 25 May 2010 12:53:58 +0000";
    
    // Convert string to date object
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"EE, d LLLL yyyy HH:mm:ss Z"];
    NSDate *date = [dateFormat dateFromString:dateStr]; 
    [dateFormat release];
    
  • 0
    // Convert string to date 
    
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyyMMdd"];
    NSDate *date = [dateFormat dateFromString:dateStr];  
    
    // Convert Date to string
    
    [dateFormat setDateFormat:@"EEEE MMMM d, YYYY"];
    dateStr = [dateFormat stringFromDate:date];  
    [dateFormat release];
    
  • 4
    NSString *mystr=@"Your string date";
    
    NSCalendar *cal = [NSCalendar currentCalendar];
    NSDate *now = [dateFormatter dateFromString:mystr];
    
    Nslog(@"%@",now);
    

    如果要设置格式,请使用以下代码:

    NSString *dateString = @"01-02-2010";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    
    // this is important - we set our input date format to match our input string
    // if format doesn't match you'll get nil from your string, so be careful
    [dateFormatter setDateFormat:@"dd-MM-yyyy"];
    NSDate *dateFromString = [[NSDate alloc] init];
    
    // voila!
    dateFromString = [dateFormatter dateFromString:dateString];
    Nslog(@"%@",[dateFormatter dateFromString:dateString]);
    
  • 437

    使用此方法将 NSString 转换为 NSdate

    -(NSDate *)getDateFromString:(NSString *)pstrDate
    {
        NSDateFormatter* myFormatter = [[NSDateFormatter alloc] init];
        [myFormatter setDateFormat:@"dd/MM/yyyy"];
        NSDate* myDate = [myFormatter dateFromString:pstrDate];
        return myDate;
    }
    
  • 0

    如果有人有兴趣在Swift这样做这样的事情,我有一个开始的东西,虽然它并不完美 .

    func detectDate(dateString: NSString) -> NSDate {
    
        var error: NSError?
        let detector: NSDataDetector = NSDataDetector.dataDetectorWithTypes(NSTextCheckingType.Date.toRaw(), error: &error)!
    
        if error == nil {
            var matches = detector.matchesInString(dateString, options: nil, range: NSMakeRange(0, dateString.length))
    
            let currentLocale = NSLocale.currentLocale()
            for match in matches {
                match.resultType == NSTextCheckingType.Date
                NSLog("Date: \(match.date.description)")
                return match.date
            }
        }
        return NSDate()
    }
    
  • 6

    NSString的日期

    NSString *dateString = [NSString stringWithFormat:@"%@",[NSDate date]];
    NSLog(@"string: %@",dateString ); //2015-03-24 12:28:49 +0000
    

    NSString到NSDate

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
    NSDate *date = [formatter dateFromString:dateString];
    NSLog(@"date: %@", date); //015-03-24 12:28:49 +0000
    
  • 1

    您可以使用扩展名 .

    extension NSDate {
        //NSString to NSDate
        convenience
        init(dateString:String) {
            let nsDateFormatter = NSDateFormatter()
            nsDateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
            // Add the locale if required here
            let dateObj = nsDateFormatter.dateFromString(dateString)
            self.init(timeInterval:0, sinceDate:dateObj!)
        }
    
        //NSDate to time string
        func getTime() -> String {
            let timeFormatter = NSDateFormatter()
            timeFormatter.dateFormat = "hh:mm"
            //Can also set the default styles for date or time using .timeStyle or .dateStyle
            return timeFormatter.stringFromDate(self)
        }
    
        //NSDate to date string
        func getDate() -> String {
            let dateFormatter = NSDateFormatter()
            dateFormatter.dateFormat = "dd, MMM"
            return dateFormatter.stringFromDate(self)
        }
    
        //NSDate to String
        func getString() -> String {
            let dateFormatter = NSDateFormatter()
            dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
            return dateFormatter.stringFromDate(self)
        }
    }
    

    因此,执行实际代码将如下所示

    var dateObjFromString = NSDate(dateString: cutDateTime)
        var dateString = dateObjFromString.getDate()
        var timeString = dateObjFromString.getTime()
        var stringFromDate = dateObjFromString.getString()
    

    还有一些默认方法,但我想它可能不适用于您从文档中提供的格式

    -dateFromString(_:)
        -stringFromDate(_:)
        -localizedStringFromDate(_ date: NSDate,
                         dateStyle dateStyle: NSDateFormatterStyle,
                         timeStyle timeStyle: NSDateFormatterStyle) -> String
    
  • 0

    最佳实践是 Build 一个通用类,您可以将所有常用方法,方法用于几乎所有项目,并将@Pavan建议的代码添加为:

    + (NSDate *)getDateOutOfString:(NSString *)passedString andDateFormat:(NSString *)dateFormat{
    
        NSString *dateString = passedString;
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:dateFormat];
        NSDate *dateFromString = [[NSDate alloc] init];
        dateFromString = [dateFormatter dateFromString:dateString];
        return dateFromString;
    
    }
    

    ..等等所有其他有用的方法

    通过这样做,您可以开始为您的应用程序构建一个干净的可重用代码 . 干杯!

  • 0

    As per Swift 2.2

    您可以从NSDate中的String和String中轻松获取NSDate . 例如

    首先设置日期格式化程序

    let formatter = NSDateFormatter();
    formatter.dateStyle = NSDateFormatterStyle.MediumStyle
    formatter.timeStyle = .NoStyle
    formatter.dateFormat = "MM/dd/yyyy"
    

    现在从字符串获取日期,反之亦然 .

    let strDate = formatter.stringFromDate(NSDate())
    print(strDate)
    let dateFromStr = formatter.dateFromString(strDate)
    print(dateFromStr)
    

    现在享受 .

  • 19

    NSString to NSDate or NSDate to NSString

    //This method is used to get NSDate from string 
    //Pass the date formate ex-"dd-MM-yyyy hh:mm a"
    + (NSDate*)getDateFromString:(NSString *)dateString withFormate:(NSString *)formate  {
    
        // Converted date from date string
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
        [dateFormatter setDateFormat:formate];
        NSDate *convertedDate         = [dateFormatter dateFromString:dateString];
        return convertedDate;
    }
    
    //This method is used to get the NSString for NSDate
    //Pass the date formate ex-"dd-MM-yyyy hh:mm a"
    + (NSString *)getDateStringFromDate:(NSDate *)date withFormate:(NSString *)formate {
    
        // Converted date from date string
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        //[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
        [dateFormatter setDateFormat:formate];
        NSString *convertedDate         = [dateFormatter stringFromDate:date];
        return convertedDate;
    }
    
  • 0

    以上示例不仅仅是为Swift 3.0编写的

    Update - Swift 3.0+ - Convert Date To String

    let date = Date() // insert your date data here
    var dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd" // add custom format if you'd like 
    var dateString = dateFormatter.string(from: date)
    
  • 2

    String To Date

    var dateFormatter = DateFormatter()
    dateFormatter.format = "dd/MM/yyyy"
    
    var dateFromString: Date? = dateFormatter.date(from: dateString) //pass string here
    

    Date To String

    var dateFormatter = DateFormatter()
     dateFormatter.dateFormat = "dd-MM-yyyy"
     let newDate = dateFormatter.string(from: date) //pass Date here
    

相关问题