2015-05-01 50 views
1

我想使用dateFormatter從字符串轉換。它可以在模擬器上正常工作,並可在設置爲12小時的時間內在手機上正常工作,但無法在手機設置爲24小時時設置。 (當模擬器設置爲24小時時它會設置)。dateFromString無法將Iphone設置爲24小時快速轉換

passedTime = "10:36 pm" 
var dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "h:mm a" 
let pickerDate = dateFormatter.dateFromString(passedTime) 
println(pickerDate) 

就像我說的,當在模擬器或我於12小時電話上運行,它可以完美運行,但是當手機SETT24小時,它打印零。我已經閱讀了一些有關語言環境設置的內容,但是當我在手機上運行該語言時,無論我處於12小時還是24小時模式,本地都是一樣的。

+0

你是如何從手機中獲得時間的?我通常只是創建一個新的NSDate對象來獲取當前的時間和日期。 – Garret

+2

您需要設置區域設置。請參閱http://stackoverflow.com/questions/6613110/what-is-the-best-way-to-deal-with-the-nsdateformatter-locale-feature –

+0

@HotLicks可能最好對您決定的答案發表評論反對票。 –

回答

0

一定要檢查12小時/ 24小時,並相應地設置格式化程序,使用「H」24小時,「h」12小時。

enter image description here

表從a blog post on Waracle.com,在那裏你可以找到完整的清單中獲取。

+1

@MartijnPieters對不起,但你挑剔。任何人都清楚這是一個引用,將圖片加入blockquote並不是真正有意義的,並且給出了適當的鏈接。舉一個例子,只是一個例子,你不必「遵循」,這不是一條規則,它只是說「這就是你如何做到這一點」。並且請不要再重複發佈同一個鏈接,這裏的每個人都已經在你的第一個評論之後看到了它,我們並不是很慢。如果你手上有太多時間,那麼回過頭來修正所有引用,對我來說,答案就是這樣。 – Mecki

+0

@Mecki政策是使用blockquote。這現在變成無用的噪音。如果你想討論政策,你可以在[Meta]上發帖。 –

0

如何使用兩個日期格式化程序來解析?

var time12hrFormatter = NSDateFormatter() 
time12hrFormatter.dateFormat = "h:mm a" 
var time24hrFormatter = NSDateFormatter() 
time24hrFormatter.dateFormat = "HH:mm" 

if let pickerDate = time12hrFormatter.dateFromString(passedTime) { 
    println(pickerDate) 
} else if let pickerDate = time24hrFormatter.dateFromString(passedTime) { 
    println(pickerDate) 
} else { 
    println("failed to parse '\(passedTime)'") 
} 
+0

我試過這樣的東西,它仍然失敗(在手機上,而不是模擬器)。該字符串在h:mm格式中顯式格式化,所以試圖在HH:mm中解析它不起作用。我無法解釋的是,爲什麼h:mm a僅在手機處於12小時格式時才起作用。 –

+0

在這種情況下,我認爲@HotLicks已經提供了上面的答案:將日期格式化程序的本地設置爲中性。 – skim

2

我有完全相同的問題......非常令人沮喪。解決方案是設置日曆的區域設置。對於Swift 3,它是:yourDateFormatter.locale = Locale(identifier: "en-US")

相關問題