2016-05-01 73 views
3

Apple TV上的结果是 “未格式化日期......”dateFormatter.dateFromString - 模拟器及Apple TV上不同的结果

在模拟的结果是 “日期格式...”

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var resultLabel: UILabel! 

    override func viewDidAppear(animated: Bool) { 

     let lastModifiedDate = "Sun, 01 May 2016 00:46:17 GMT" 
     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z" 

     if let lastModifiedDate = dateFormatter.dateFromString(lastModifiedDate) { 
      resultLabel.text = "date formated \(lastModifiedDate)" 
     } else { 
      resultLabel.text = "date NOT formated \(lastModifiedDate)" 
     } 
    } 
} 

回答

4

Apple TV的区域设置最有可能与Mac(模拟器)上的区域设置不同。根据区域设置,dateFormatter可能无法从字符串创建NSDate。 你应该总是使用

+ (NSString *)dateFormatFromTemplate:(NSString *)template options:(NSUInteger)opts locale:(NSLocale *)locale 

从文档:

返回表示适当安排指定语言环境的给定日期格式组件的本地化的日期格式字符串。返回值本地日期格式字符串,表示模板中给出的日期格式组件,适合locale指定的区域设置。 返回的字符串可能不完全包含模板中给出的那些组件,但可能(例如)应用了特定于区域的调整。 讨论 不同的语言环境对日期组件的排序有不同的约定。您可以使用此方法为指定语言环境的一组给定组件获取适当的格式字符串(通常使用当前语言环境 - 请参阅currentLocale)。

参见:this answer.

+0

好的提示。谢谢! –

0

我添加以下行。现在它正在工作。

dateFormatter.locale = NSLocale(localeIdentifier: "en_GB") 
+0

但请记住,硬编码语言环境可能不是您用户的最佳体验。最好的解决方案是让它适用于任何语言环境。 – Joride

相关问题