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

如何在Swift ios编程中处理应用程序和服务器数据之间的不同时区?,ios,iphone,datetime,timezone,Ios,Iphone,Datetime,Timezone,我不确定以前是否回答过这个问题。 我需要知道是否有可能处理两个不超过+0000的不同时区 我的意思是,我的iphone应用程序从服务器调用数据,比如某些对象的创建日期和时间。但是日期和时间是丹麦时间,这意味着创建日期的时区类似于+0100 但是iphone应用程序认为初始时区当然是+0000,如果我使用dateformatter设置时区,它会在初始日期时间上增加一个小时,这是不正确的 是否有一种明智的方法来处理Swift中的时区,或者每次我将丹麦时间转换为用户手机上的时间时,我都必须手动减去一个

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

将服务器和应用程序时区更改为GMT/时间戳、完成、易于存储、比较、计算、反转等