2015-09-15 6 views
6

पर कनवर्ट करें मेरे पास एक डेटा स्ट्रिंग है जिसमें डेटा है।अज्ञात प्रारूप (किसी भी प्रारूप) के साथ स्ट्रिंग को

आम तौर पर यह 'जनवरी' में होगा। 3, 1 9 66 'प्रकार का प्रारूप, लेकिन अंतरराष्ट्रीय मतभेदों के कारण, यह हमेशा ठीक नहीं हो सकता है।

मुझे डेटा को पढ़ने और उसे मानक दिनांक स्ट्रिंग ('YYYY-MM-DD') में बदलने की आवश्यकता है।

var dataString = 'Jan. 3, 1966' 
var dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = # I DON'T KNOW THE EXACT INPUT FORMAT ! 
let dateValue = dateFormatter.dateFromString(dataString) 
+0

कृपया अपनी समस्या के उदाहरणों और समाधान जो आपने कोशिश की हो, के साथ कुछ कोड स्निपेट जोड़ें। – Nishant

+0

दिनांक कोड के अन्य संभावित मूल्य क्या हैं जिन्हें आप अपने कोड में संभालना चाहते हैं? – Nishant

+0

मुझे सभी संभावित विविधताओं को नहीं पता है, लेकिन यह '3 जनवरी, 1 9 66' या '3 जनवरी, 1 9 66' या '3 जनवरी 1 9 66' जैसी चीजें हो सकती है। – user49hc

उत्तर

22

Xcode 9 • स्विफ्ट 4 या Xcode 8.3.2 • स्विफ्ट 3.1

आप इस प्रकार NSDataDetector उपयोग कर सकते हैं:

असल में यह है कि क्या मैं अब तक किया है

extension String { 
    var nsString: NSString { return self as NSString } 
    var length: Int { return nsString.length } 
    var nsRange: NSRange { return NSRange(location: 0, length: length) } 
    var detectDates: [Date]? { 
     return try? NSDataDetector(types: NSTextCheckingResult.CheckingType.date.rawValue) 
       .matches(in: self, range: nsRange) 
       .flatMap{$0.date} 
    } 
} 

extension Collection where Iterator.Element == String { 
    var dates: [Date] { 
     return flatMap{$0.detectDates}.flatMap{$0} 
    } 
} 

परीक्षण:

let dateStrings = ["January 3, 1966","Jan 3, 1966", "3 Jan 1966"] 
for dateString in dateStrings { 
    if let dateDetected = dateString.detectDates?.first { 
     print(dateDetected) 
     // 1966-01-03 14:00:00 +0000 
     // 1966-01-03 14:00:00 +0000 
     // 1966-01-03 14:00:00 +0000 
    } 
} 


let dateStrings = ["January 3, 1966","Jan 3, 1966", "3 Jan 1966"] 

for date in dateStrings.dates { 
    print(date) 
    // 1966-01-03 14:00:00 +0000 
    // 1966-01-03 14:00:00 +0000 
    // 1966-01-03 14:00:00 +0000 
} 
+0

मुझे यकीन नहीं है, लेकिन तारीख नहीं है "वॉल्यूम" एलएलएल। डीडी, yyyy "" जनवरी 3, 1 9 66 "जैसी प्रारूपित तिथि से जुड़ा हुआ है। क्या यह अन्य प्रारूपों में तारों के साथ काम करेगा? – user49hc

+1

मुझे लगता है कि आपकी सबसे अच्छी शर्त शायद NSDataDetector –

+1

धन्यवाद! आपका समाधान बहुत अच्छा था। – user49hc

-1

MKDataDetectorNSDataDetector के शीर्ष पर बनाया गया है - इस प्रकार आप इसे पूरा करने के लिए किसी भी कार्यान्वयन को रोक सकते हैं। डेटा की सुविधाजनक पहचान प्रदान करने के लिए यह String भी बढ़ाता है।

संबंधित मुद्दे