如何在 Swift ios 编程中处理应用程序和服务器数据之间的不同时区



我不确定以前是否回答过这个问题。我需要知道是否可以处理两个不是 +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")

相关内容

  • 没有找到相关文章

最新更新