2016-03-10 38 views
0

我允許我的用戶能夠使用他們的當地時區隨機選擇日期和時間。我希望能夠以UTC格式將此日期字符串發送到服務器,以便世界各地的其他人可以使用它們的本地時區讀取它。我已經在網上閱讀了很多關於如何將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

'NSDate'總是存儲在UTC時區的日期和時間 –

+0

你要知道他們的本地日期和時間,他們的時區,並且還具有夏令時他們。從這三個參數你可以計算UTC – Luka

+0

RFC 3339/ISO 8601格式是發送到Web服務的標準。並且,如果用戶設備未使用公曆格式,請記住根據[技術問答1480](https://developer.apple.com/library/ios/qa/qa1480/_index.html)使用'en_US_POSIX'的'locale'日曆。 – Rob

回答

0

如果您使用UIDatePicker,以UTC獲取所選日期和時間非常簡單。下面的第一行代碼將返回的選定時間YYYY-MM-DD hh:mm:ss第二行代碼將返回1970年1月1日上午12:00格林威治標準時間以來的時間間隔(以秒爲單位)。

// 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) 
} 
+1

順便說一句,不會以任何特定格式返回它:它是'NSDate'和'yyyy-MM-dd HH: mm:ss Z'(注意大小寫)格式只是'description'方法的一個函數。如果你想要字符串表示,每個[技術問答1480](https://developer.apple.com/library/ios/qa/qa1480/_index.html)應該總是使用'​​NSDateFormatter'。 – Rob

+0

謝謝@ZGski,我現在面臨的問題是:使用datePicker,我允許用戶選擇時間和日期,拆分這些獨立的NSDate,然後連接。從這裏,我有一個由用戶選擇的本地時間。現在,我如何將本地時間轉換爲UTC?我將添加一個編輯,以顯示我到目前爲止 – Jay

+0

哦,我明白了..我會編輯我的答案。 – ZGski