2016-02-13 246 views
0

假設我獲得了像「7:00」這樣的輸入字符串。我知道時間是EST,但我想將其轉換爲本地時間(所以對於PST中的人來說它說4:00)。我嘗試了下面的代碼,但我一直得到24小時的時間和完整的日期(例如:可選(2000-01-01 16:00:00 +0000))。我只想要一小時:最少時間......我做錯了什麼?將字符串EST時間轉換爲本地時間

var dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "HH:mm" 
dateFormatter.timeZone = NSTimeZone.localTimeZone() 
gameClock = "\(dateFormatter.dateFromString("7:30"))" 
println(gameClock) 

回答

0

您需要指定用於處理服務器日期的日期格式程序的時區。默認情況下,日期格式化程序的時區是設備的默認時區。

因此,對於您上面的代碼,你應該這樣做:

let dateStringFromServer = "07:00"  

let serverDateFormatter = NSDateFormatter() 
serverDateFormatter.dateFormat = "HH:mm" 
serverDateFormatter.timeZone = NSTimeZone(name: "EST") 

let dateFromServer = serverDateFormatter.dateFromString(dateStringFromServer) 

let localDateFormatter = NSDateFormatter() 
serverDateFormatter.dateFormat = "HH:mm" 

let localizedStringForThatDate = localDateFormatter.stringFromDate(dateFromServer!) 
+0

切勿使用時區名稱。他們不是標準化的。始終使用時間偏移創建時區。 – Sulthan

0

dateFormatter.dateFromString("7:30")給你一個NSDate不是NSString。您已經使用另一個NSDateFormatter對象來獲取所需字符串格式的日期。

let dateFormatterForDisplay = NSDateFormatter(); 
dateFormatterForDisplay.dateFormat = "HH:mm" 
dateFormatterForDisplay.locale = NSLocale(localeIdentifier: "en_US_POSIX") 

(你需要在上面的最後一行,如果你想強制12小時模式,默認爲NSLocale.currentLocale(),並且可以12小時或針對不同的區域設置24小時模式)

然後

let displayString = dateFormatterForDisplay.stringFromDate(gameClock) 
相關問題