2017-01-06 12 views
1

私はtimeUTCを "5s前に"変換したい。前のラベルはまた、電話で12時間/ 24時間の変化を考える。ためにクラッシュする。今度はコードの行の下に私がプレイグラウンドで必要とするラベル値を返します。しかし、私のイオスプロジェクトではありません。 Ifブロックには入りません。私は何が欠けているか、それは何が間違っていますか?スイフト3 - UTCから前にラベル、思考12時間/ 24時間デバイス時間の変更

let dateStringUTC = "2016-10-22 12:37:48 +0000" 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ" 

    if let from = dateFormatter.date(from: dateStringUTC) { 

     dateFormatter.dateFormat = "MMM d, yyyy h:mm:ss a" 
     let stringFromDate = dateFormatter.string(from: from) 
     let dateLast = dateFormatter.date(from: stringFromDate) 

     let now = Date() 
     let components: NSCalendar.Unit = [.second, .minute, .hour, .day, .weekOfMonth] 
     let difference = (Calendar.current as NSCalendar).components(components, from: dateLast!, to: now, options: []) 

     if difference.second! <= 0 { 
      self.timeInfoLbl.text = "now" 
     } 
     if difference.second! > 0 && difference.minute! == 0 { 
      self.timeInfoLbl.text = String(describing: difference.second!) + "s." 
     } 
     if difference.minute! > 0 && difference.hour! == 0 { 
      self.timeInfoLbl.text = String(describing: difference.minute!) + "m." 
     } 
     if difference.hour! > 0 && difference.day! == 0 { 
      self.timeInfoLbl.text = String(describing: difference.hour!) + "h." 
     } 
     if difference.day! > 0 && difference.weekOfMonth! == 0 { 
      self.timeInfoLbl.text = String(describing: difference.day!) + "d." 
     } 
     if difference.weekOfMonth! > 0 { 
      self.timeInfoLbl.text = String(describing: difference.weekOfMonth!) + "w." 

      if difference.weekOfMonth! > 52 { 
       let number = Float(difference.weekOfMonth!)/52 
       let strYear = String(format:"%.1f", number) 
       self.timeInfoLbl.text = strYear + " year" 
      } 
     } 
    } 

答えて

1

日にこの文字列を変換するには、私はどうなる:

let dateStringUTC = "2016-10-22 12:37:48 +0000" 
let dateFormatter = DateFormatter() 
dateFormatter.locale = Locale(identifier: "en_US_POSIX") 
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss X" 
let date = dateFormatter.date(from: dateStringUTC)! 

を次に、DateComponentsFormatter、例えばを検討し、素敵な形式で経過時間を表示する:

let now = Date() 

let formatter = DateComponentsFormatter() 
formatter.unitsStyle = .full 
formatter.maximumUnitCount = 2 
let string = formatter.string(from: date, to: Date())! + " " + NSLocalizedString("ago", comment: "added after elapsed time to say how long before") 
+0

まず世話をしてくれてありがとう、私はDate()変換するUTCに問題があると思う、どのようにDate()型に正しく "2016-10-22 12:37:48 +0000"を変換できますか?私はそれに大きなバグがあるので、私はデバイス時間12hと24hの両方のためにこれを試してみます。 – tobeiosdev

+1

'locale'を必ず設定してください。 'dateFormatter.locale = Locale(識別子:" en_US_POSIX ")'。また、 'ZZZ'の代わりに、' ZZZZZ'または 'X'を使用していました。 – Rob

+0

もう一度説明していただき、ありがとうございました。私のデータベースにはすでに24時間のUTC文字列がありますので、デバイスタイムタイプとは独立して動作しています。今は、上記の日付/時刻で「2ヶ月、2週間前」と表示されます。また、私は驚いています。これらの部分すべてを列挙して、私に数週間しか見せないのですか?たとえば、2ヶ月と2週間がある場合は、別々のブロックで週を計算してから別のブロックを追加することができます。 – tobeiosdev

関連する問題