我不确定以前是否回答过这个问题。我需要知道是否可以处理两个不是 +0000 的不同时区。
我的意思是我的iphone应用程序从服务器调用数据,例如某些对象的创建日期和时间。但是日期和时间是丹麦时间,这意味着创建日期的时区类似于 +0100
但是iPhone应用程序认为初始时区当然是+0000,如果我使用dateformatter来设置时区,它会在初始日期时间上添加一个小时,这是不正确的。
有没有一种明智的方法来处理 Swift 中的时区,或者每次从丹麦时间转换为用户手机上的任何时间时,我都必须手动减去一个小时?
理想情况下,您需要要求服务器端使用 GMT +00,以便如果他们想与其他国家/地区合作,它对每个人都可以正常工作。
或者,另一种方法是将时间存储在时间戳中。它将自动为 GMT +00
然后系统将考虑用户在手机上的时区为您处理它。
希望对你有帮助
您需要询问 Web 服务开发人员是否返回日期,这些日期是否为 GMT?如果没有,请要求他们仅以 GMT 存储日期。
当 api 返回数据时,将您的日期转换为您想要的格式。
我在 swift 2.2 中做到了这一点。创建了一个字符串扩展。
extension String {
func getFormattedDate(currentFormat : String,convertFormat : String) -> String {
let dateStr = self
let dateFormate = NSDateFormatter()
dateFormate.timeZone = NSTimeZone(abbreviation: "GMT")
dateFormate.dateFormat = currentFormat
if let date = dateFormate.dateFromString(dateStr) {
dateFormate.dateFormat = convertFormat
dateFormate.timeZone = NSTimeZone.localTimeZone()
return dateFormate.stringFromDate(date)
}
return ""
}
func getFormattedDateForDefaultTimeZone(currentFormat : String,convertFormat : String) -> String {
let dateStr = self
let dateFormate = NSDateFormatter()
dateFormate.timeZone = NSTimeZone.localTimeZone()
dateFormate.dateFormat = currentFormat
if let date = dateFormate.dateFromString(dateStr) {
dateFormate.dateFormat = convertFormat
dateFormate.timeZone = NSTimeZone.localTimeZone()
return dateFormate.stringFromDate(date)
}
return ""
}
}
像下面这样使用:
let dateStr = btnDate.currentTitle!.getFormattedDate("dd/MMM/yyyy", convertFormat: "dd-MM-yyyy")