如何将任意时区转换为UTC?

时间:2016-03-10 21:50:42

标签: swift

我允许我的用户使用他们的本地时区选择随机日期和时间。我希望能够以UTC格式将此日期字符串发送到服务器,以便世界各地的其他人可以使用其本地时区读取它。我已经在线阅读了很多关于如何将UTC转换为当地时间的信息,而不是相反。我怎么能做到这一点?

编辑:

首先,我使用第一个函数来获取用户选择的日期和时间的连接字符串,将其转换为NSDate,然后将此NSDate转换为UTC字符串。这是实现目标的最佳方法吗?

public class func localTimeZoneStringToDate(string: String) -> NSDate {
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    dateFormatter.timeZone = NSTimeZone.localTimeZone()
    return dateFormatter.dateFromString(string)!
}

public class func UTCStringFromDate(date: NSDate) -> String {
    let dateFormatter = NSDateFormatter()
    dateFormatter.timeZone = NSTimeZone(abbreviation: "UTC")
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    return dateFormatter.stringFromDate(date)

}

1 个答案:

答案 0 :(得分:0)

如果您正在使用UIDatePicker,那么以UTC格式获取所选日期和时间非常简单。下面的第一行代码将返回 YYYY-MM-DD中选定的时间hh:mm:ss 第二行代码将返回自1970年1月1日上午12:00以来的时间间隔(以秒为单位) GMT。

// Returns Selecteed Date //
datePicker.date

// Returns Seconds Since Jan. 1, 1970 //
datePicker.date.timeIntervalSince1970

但是,如果您没有使用UIDatePicker,只需使用以下代码即可获得上述代码返回的相同信息:

//** Variable "pastDate" must be NSDate **//

// Returns Selected Date //
pastDate

// Returns Seconds Since Jan.1, 1970 //
pastDate.timeIntervalSince1970

编辑:

我想我了解您现在尝试做的事情,以下代码应以UTC格式返回用户选择的日期。

func UTCStringFromDate(date: NSDate) -> String {
    // Get User's Time //
    let calendar = NSCalendar.currentCalendar()
    // Get User's TimeZone Difference //
    let difference = calendar.timeZone.secondsFromGMT

    // Get UTC Time //
    let adjustedTime = calendar.dateByAddingUnit(.Second, value: -difference, toDate: date, options: [])!

    // Format Date //
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    return dateFormatter.stringFromDate(adjustedTime)
}