2016-02-13 247 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) 
相关问题