2017-05-29 80 views
0

有一個日期字符串我:轉換datestring斯威夫特3 NSDate的

週三2017年3月25日5時30分〇〇秒GMT + 0530(IST)

我想這個字符串轉換Date對象斯威夫特3.

我已經提到Link1Link 2Link 3生成此日期字符串格式,但無法獲得正確的格式。

+0

正如我所說的,值得關注的是不與代碼,值得關注的是,我無法獲得格式打印的值提到的日期字符串。 –

+2

這一個很有趣。格式''EEE MMM dd yyyy HH:mm:ss'GMT'Z(z)「'應該可以工作。這種格式會將Date對象格式化爲與問題中顯示的格式相同的格式,並且它將正確地解析問題中顯示的格式的字符串,但僅限於其他時區。 'DateFormatter'似乎不喜歡'IST'時區。我用我提到的格式解析字符串'「Wed Mar 25 2017 05:30:00 GMT-0500(CDT)」''沒有問題。 – rmaddy

+1

「IST」時區肯定存在問題。請參閱[這些搜索結果](https://stackoverflow.com/search?q=dateformatter+ist)。由於它是不明確的,所以'DateFormatter'在解析時無法處理它。 – rmaddy

回答

-1
var dateString = "Wed, 25 Mar 2017 05:30:00 +0000" 
var dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "E, d MMM yyyy HH:mm:ss Z" 
var dateFromString = dateFormatter.date(from: dateString) 
print(dateFromString) 
+1

「2017年3月25日星期三05:30:00 +0000」它與OP所要求的字符串不同 –

+0

確定然後只是將dateformatter更改爲:dateFormatter.dateFormat =「E,MMM d yyyy HH:mm:ss Z」 –

+1

這仍然不完全相同。細節很重要。 – rmaddy

0

1)如果包含了像ISTGMT差異時區名稱字符串,那麼你可以使用NSDateDetector作爲this SO post answer解釋說:

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

//your example here 
let dateString = "Wed Mar 25 2017 05:30:00 GMT+0530 (IST)" 
if let dateDetected = dateString.detectDates?.first { 
    let date = dateDetected//Mar 25, 2017, 5:30 AM 
    print(dateDetected)//2017-03-25 00:00:00 +0000 - this is GMT time 
} 

2017年3月25日, 5:30 AM //將日期轉換爲當地時區
2017-03-25 00:00:00 +0000 // GMT時間印刷值


2)或者,如果你一些如何能夠從你的字符串中刪除GMTIST參考那就試試這個:

let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "EEE, MMM d yyyy HH:mm:ss Z" 
let date = dateFormatter.date(from: "Wed Mar 25 2017 05:30:00 +0530")! 
print(date) 

它會給你

2017年3月25日,5:30上午 //日期轉換爲當地時間區
2017年3月25日00:00:00 +0000 //的GMT時間