将字符串EST时间转换为本地化时间

时间:2016-02-13 07:07:40

标签: ios swift

假设我有一个像“7:00”这样的输入字符串。我知道时间是EST,但我想将其转换为本地化时间(因此对于PST中的人来说,它说4点)。我尝试了下面的代码,但是我一直有24小时的时间和完整的日期(例如:可选(2000-01-01 16:00:00 +0000))。我只想要一小时:最短的时间......我做错了什么?

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

2 个答案:

答案 0 :(得分: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!)

答案 1 :(得分: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)