亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將NSString轉換為NSDate(并再次返回)

將NSString轉換為NSDate(并再次返回)

iOS
Smart貓小萌 2019-06-10 16:26:19
將NSString轉換為NSDate(并再次返回)我將如何轉換NSString就像“01/02/10“(指2010年2月1日)成為NSDate?我怎么能把NSDate回到一根繩子里?
查看完整描述

3 回答

?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

使出Date延拓為了這個。它用NSDataDetector而不是NSDateFormatter.

// Just throw at it without any format.

var date: Date? = Date.FromString("02-14-2019 17:05:05")

令人愉快的是,它甚至能識別出這樣的東西“明天5點”.


XCTAssertEqual(Date.FromString("2019-02-14"),                    Date.FromCalendar(2019, 2, 14))

XCTAssertEqual(Date.FromString("2019.02.14"),                    Date.FromCalendar(2019, 2, 14))

XCTAssertEqual(Date.FromString("2019/02/14"),                    Date.FromCalendar(2019, 2, 14))

XCTAssertEqual(Date.FromString("2019 Feb 14"),                   Date.FromCalendar(2019, 2, 14))

XCTAssertEqual(Date.FromString("2019 Feb 14th"),                 Date.FromCalendar(2019, 2, 14))

XCTAssertEqual(Date.FromString("20190214"),                      Date.FromCalendar(2019, 2, 14))

XCTAssertEqual(Date.FromString("02-14-2019"),                    Date.FromCalendar(2019, 2, 14))

XCTAssertEqual(Date.FromString("02.14.2019 5:00 PM"),            Date.FromCalendar(2019, 2, 14, 17))

XCTAssertEqual(Date.FromString("02/14/2019 17:00"),              Date.FromCalendar(2019, 2, 14, 17))

XCTAssertEqual(Date.FromString("14 February 2019 at 5 hour"),    Date.FromCalendar(2019, 2, 14, 17))

XCTAssertEqual(Date.FromString("02-14-2019 17:05:05"),           Date.FromCalendar(2019, 2, 14, 17, 05, 05))

XCTAssertEqual(Date.FromString("17:05, 14 February 2019 (UTC)"), Date.FromCalendar(2019, 2, 14, 17, 05))

XCTAssertEqual(Date.FromString("02-14-2019 17:05:05 GMT"),       Date.FromCalendar(2019, 2, 14, 17, 05, 05))

XCTAssertEqual(Date.FromString("02-13-2019 Tomorrow"),           Date.FromCalendar(2019, 2, 14))

XCTAssertEqual(Date.FromString("2019 Feb 14th Tomorrow at 5"),   Date.FromCalendar(2019, 2, 14, 17))

就像:


extension Date

{



    public static func FromString(_ dateString: String) -> Date?

    {

        // Date detector.

        let detector = try! NSDataDetector(types: NSTextCheckingResult.CheckingType.date.rawValue)


        // Enumerate matches.

        var matchedDate: Date?

        var matchedTimeZone: TimeZone?

        detector.enumerateMatches(

            in: dateString,

            options: [],

            range: NSRange(location: 0, length: dateString.utf16.count),

            using:

            {

                (eachResult, _, _) in


                // Lookup matches.

                matchedDate = eachResult?.date

                matchedTimeZone = eachResult?.timeZone


                // Convert to GMT (!) if no timezone detected.

                if matchedTimeZone == nil, let detectedDate = matchedDate

                { matchedDate = Calendar.current.date(byAdding: .second, value: TimeZone.current.secondsFromGMT(), to: detectedDate)! }

        })


        // Result.

        return matchedDate

    }

}


使出NSString擴展為了這個。


// 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>

部分艾普斯!基特,抓住這個類別NSString+EPPZKit.h來自GitHub。

無論您不確定(或不關心)字符串中包含的日期格式,使用NSDataDetector解析日期.


//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; }];




查看完整回答
反對 回復 2019-06-10
  • 3 回答
  • 0 關注
  • 571 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號