2017-03-01 7 views
0

財団のDateFormatterを使用して、かなり奇妙な形式のデータ文字列を解析するには、/Date(1488335133000+0100)/(2017-03-01 03:25:33を表す)を使用したいと思います。私が言うことができる限り、これはGMT + 1のタイムゾーンを指定して1970年以降のミリ秒単位の日付を表しています。DateFormatterを使用して難解な日付文字列を解析する

ただし、ミリ秒または秒のフォーマット文字列をunixタイムスタンプとして指定する方法はありません。これも可能ですか?

このような場合は、この日付を正しく解析するための最適なオプションは何ですか?私は現在ミリ秒とタイムゾーンがあるまで文字列を選び、ミリ秒を1000で割ってDate(timeIntervalSince1970: seconds)で新しい日付オブジェクトを作成しています。しかし、タイムゾーンがこれにどのように影響を与えるのかは不明です。

答えて

1

DateFormatterこれを処理できません。 NSRegularExpressionを使用してコンポーネントを分割します。

let str = "/Date(1488335133000+0100)/" 

let regex = try! NSRegularExpression(pattern: "/Date\\((\\d+)(\\+|-)(\\d{2})(\\d{2})\\)/", options: []) 
if let match = regex.firstMatch(in: str, options: [], range: NSMakeRange(0, str.characters.count)) { 
    let nsstr = str as NSString 
    let millisecond = Double(nsstr.substring(with: match.rangeAt(1)))! 
    let sign  = nsstr.substring(with: match.rangeAt(2)) 
    let hour  = Double(nsstr.substring(with: match.rangeAt(3)))! 
    let minute  = Double(nsstr.substring(with: match.rangeAt(4)))! 

    let offset = (sign == "+" ? 1 : -1) * (hour * 3600.0 + minute * 60.0) 
    let date = Date(timeIntervalSince1970: millisecond/1000 + offset) 

    print(date) 
} 
+0

ご迷惑をおかけします。ヘルプに大きな感謝、これに一致する正規表現を使用して私は以前試みたものよりもはるかにクリーンです。ありがとう! –

関連する問題