dateFormatter.dateFromString - 模拟器上的不同结果& Apple TV

时间:2016-05-01 07:29:09

标签: swift tvos apple-tv

在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)"
        }
    }
}

2 个答案:

答案 0 :(得分:4)

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

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

来自文档:

  

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

另请参阅: this answer.

答案 1 :(得分:0)

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

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