2016-05-01 10 views
3

"フォーマットされていない日..."dateFormatter.dateFromString - 結果は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)" 
     } 
    } 
} 

答えて

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

関連する問題