我允许我的用户使用他们的本地时区选择随机日期和时间。我希望能够以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)
}
答案 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)
}