2015-07-13 145 views
1

有没有办法让服务器的时间使用swift。我想设置一个基于服务器的静态时间。这样即使用户更改时区和日期,它不会有问题,并且会显示视图控制器上的时间将根据服务器而不是NSDate的Swift获取服务器时间

let today = NSDate() 
println(today) 

目前上是一个时间上面的代码会更改日期和时间,如果在手机设置中更改了日期和时间。我也在使用我的代码解析。有没有办法从解析中获取服务器时间?

+0

为什么不只是将'NSDate'的时区设置为您要使用的服务器相同,因此不需要网络呼叫? http://stackoverflow.com/a/24917928/1186243 – sbarow

+0

时区功能很好的基础上的链接。你如何设定日期到服务器是我想知道的。因为在我将手机上的日期设置更改为过去或未来日期时,日期会在应用中更改:) –

+0

查看此https://www.parse.com/questions/is-there- a-way-to-retrieve-the-current-server-time – sbarow

回答

6

基于此链接https://github.com/freak4pc/NSDate-ServerDate我写了swift的代码。尝试和测试。它的工作原理。

override func viewDidLoad() { 
    super.viewDidLoad() 

    //call ServerTimeReturn function 

    serverTimeReturn { (getResDate) -> Void in 
     var dFormatter = NSDateFormatter() 
     dFormatter.dateStyle = NSDateFormatterStyle.LongStyle 
     dFormatter.timeStyle = NSDateFormatterStyle.LongStyle 
     dFormatter.timeZone = NSTimeZone(abbreviation: "GMT") 
     var dateGet = dFormatter.stringFromDate(getResDate) 

     println("Formatted Time : \(dateGet)") 
    } 

     } 

    func serverTimeReturn(completionHandler:(getResDate: NSDate!) -> Void){ 

    let url = NSURL(string: "http://www.google.com")  
    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in 
     let httpResponse = response as? NSHTTPURLResponse 
     if let contentType = httpResponse!.allHeaderFields["Date"] as? String { 

      var dFormatter = NSDateFormatter() 
      dFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z" 
      var serverTime = dFormatter.dateFromString(contentType) 
      completionHandler(getResDate: serverTime) 
     } 
    } 

    task.resume() 
} 
+0

Thx男人,你最好!我不得不允许应用程序访问http网站才能使用; D –