Swift从NSHTTPURLResponse获取Last-Modified属性作为NSDate

时间:2015-10-20 04:39:37

标签: ios swift type-conversion nsdate

我试图将我的URLResponse的最后修改属性作为NSDate获取。 我按照以下说明进行操作:

How can I convert string date to NSDate?

Convert String to NSDate in Swift

Date string to NSDate swift

From String to NSDate in Swift

但没有一个工作..我从URLResponse-Object以#34;星期一,2015年10月19日05:57:12 GMT"

的形式正确收到日期作为字符串

我需要将此String转换为NSDate,以便能够将其与NSDate形式的localDate进行比较:2015-10-19 05:57:12 UTC

我也尝试了不同的日期格式,但它没有任何区别。

我目前的代码如下:

//The serverDate needs to match the localDate which is a
//NSDate? with value: 2015-10-19 05:57:12 UTC

if let httpResp: NSHTTPURLResponse = response as? NSHTTPURLResponse {
    let date = httpResp.allHeaderFields["Last-Modified"] as! String //EXAMPLE:  "Mon, 19 Oct 2015 05:57:12 GMT"
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ"
    dateFormatter.timeZone = NSTimeZone(abbreviation: "UTC")
    let serverDate = dateFormatter.dateFromString(date) as NSDate?

    //conversion always fails serverDate == nil       
    println("ServerDate: \(serverDate)")    
}

任何人都可以解释转换失败的原因吗?我可以尝试转换我的日期吗?

3 个答案:

答案 0 :(得分:3)

我解决了......

这是一个逻辑问题,因为我想为一个日期解析一个字符串,我必须指定输入dateFormat来接收一个正确的日期:

从服务器输入:String =“星期一,2015年10月19日05:57:12 GMT”

以下格式为日期:“EEEE,dd LLL y​​yyy HH:mm:ss zzz”(http://userguide.icu-project.org/formatparse/datetime

- >工作代码:

if let httpResp: NSHTTPURLResponse = response as? NSHTTPURLResponse {
    //EXAMPLE:  "Mon, 19 Oct 2015 05:57:12 GMT"
    let date = httpResp.allHeaderFields["Last-Modified"] as! String 
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "EEEE, dd LLL yyyy HH:mm:ss zzz"
    serverDate = dateFormatter.dateFromString(date) as NSDate?

    //serverDate is now: 2015-10-19 05:57:12 UTC 
    println("ServerDate: \(serverDate)")
 }

答案 1 :(得分:3)

Swift 4,XCode 9:

let date = httpResponse.allHeaderFields["Date"] as! String
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE, dd LLL yyyy HH:mm:ss zzz"
let serverDate = dateFormatter.date(from: date)

改变为' HH'确实需要@MikeTaverne建议。

答案 2 :(得分:0)

就像评论所说,这段代码有效:

$dir = 'gifs';
$count = 1;

function listFolderFiles($dir){
  global $count;
  $results = new DirectoryIterator($dir);

  echo '<ul>';

  foreach($results as $fileInfo){

  if($fileInfo->isFile()){

    $oldFileName = $fileInfo->getPathname();
    $newFileName = $fileInfo->getPath() . '/' . $count . '.gif';

    //rename($oldFileName, $newFileName);

    echo '<li>' . 'File  Old: ' . $oldFileName . '  New: ' . $newFileName . '</li>';

    $count++;

  }

  if($fileInfo->isDir() && !$fileInfo->isDot()){

    echo '<li>' . 'Folder: ' . $fileInfo->getPathname() . '</li>';
    listFolderFiles($fileInfo->getPathname());

  }

  }

  echo '</ul>';



}


listFolderFiles($dir);

请注意接受的答案中的大写if let httpResp: NSHTTPURLResponse = response as? NSHTTPURLResponse { // "Mon, 19 Oct 2015 05:57:12 GMT" let headerDate = httpResp.allHeaderFields["Last-Modified"] as! String; // converter let dateFormatter = NSDateFormatter(); dateFormatter.dateFormat = "EEEE, dd LLL yyyy HH:mm:ss zzz"; // your answer let serverDate = dateFormatter.dateFromString(headerDate) as NSDate?; print("ServerDate: \(serverDate)") } 而不是HH