2017-08-17 10 views
-2

私はSwifty jsonを使用してjsonを解析しています。今私は"create_date"として、タイムスタンプ&だけでなく、 "2017-08-17 20:00:00"のような日付文字列を持つことができるようなキーを持っています。今は、それが文字列の日付になるか、タイムスタンプ.Iが使用dict["create_date"].doubleValueあれば、文字列、日付場合ので、このSwifty jsonでvalueがdatestringかdoubleかをチェックする方法?

if let timeInterval = dic?["created_at"].doubleValue { 
    print("timeinterval is \(timeInterval)") 
    date1 = NSDate(timeIntervalSince1970: (timeInterval/1000)) 
    date = self.getStrDateFromDate(dob: date1!) as String 
} 

を解析するためのコードの下に使用しています、それはそれは15383673563465として、いくつかのタイムスタンプを返してくれたタイムスタンプの場合は2017 &を返すrを。

ここで、日付またはタイムスタンプがどのように識別されますか。

+1

'if let'の最後に型キャストを追加するだけです。 – Desdenova

+0

あなたのdictがJSONであれば 'time letter = dic?[created_at"]。string {} ' –

+0

タイムスタンプの場合にはそれも文字列になります。 " - "が含まれている場合は条件を追加しました – Techiee

答えて

1

オプションのバインディングを使用して、Doubleの値をdoubleのSwiftyJSONプロパティにキャストします。ダウンキャストが成功した場合はDateから文字列を作成し、それ以外の場合は日付文字列を直接使用します。

let dateString : String 
if let timeInterval = dic?["created_at"].double { 
    print("timeinterval is \(timeInterval)") 
    date1 = Date(timeIntervalSince1970: timeInterval/1000) 
    dateString = self.getStrDateFromDate(dob: date1!) as String 
} else { 
    dateString = dic?["created_at"].stringValue 
} 

サイドノート:

はなぜ(ブリッジ)は、文字列であることを想定している(getStrDateFromDateから)結果を文字列にキャストしていますか?

0

可能な日付文字列の形式でDateFormatterを試してから、それをダブルに変換しようとします。または逆も同様です。注文は本当にあまり重要ではありませんが、最初にダブルを確認する方が少し安いかもしれません。

import Foundation 

func convertDate(dateString:String) -> Date? { 
    // try `Double` 
    if let timestamp = Double(dateString) { 
    return Date(timeIntervalSince1970: timestamp) 
    } 

    // try `DateFormatter` 
    let formatter = DateFormatter() 
    formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
    if let date = formatter.date(from: dateString) { 
    return date 
    } 

    // give up 
    return nil 
} 

let dateString1 = String(Date().timeIntervalSince1970) 
let dateString2 = "2017-08-17 20:00:00" 
let dateString3 = "something" 

print(convertDate(dateString: dateString1) ?? "unknown") 
print(convertDate(dateString: dateString2) ?? "unknown") 
print(convertDate(dateString: dateString3) ?? "unknown") 

// 2017-08-17 15:15:27 +0000 
// 2017-08-18 00:00:00 +0000 
// unknown 

DateのデフォルトdescriptionはGMTを使用することに注意してください。私の場合は4時間で終了します。そのため、表示された時間は入力した時間と4時間異なります。

関連する問題