2

サーバーの応答で「/Bla(1344433014807)/」という形式で日付を受け取ります。1344433014807 は、1970 年 1 月 1 日からの秒数です。

また、私が使用しているネットワーク エンジンには次のコードがあります。

NSDateFormatter* dateformatter = [[NSDateFormatter alloc] init];
[dateformatter setDateFormat:dateFormat];
NSDate *date = [dateformatter dateFromString:dateString];

質問: @"/Bla(1344433014807)/" のような dateString から日付を取得するために正しい dateFormat を指定するにはどうすればよいですか?

注:エンジンでは、dateString を操作するアクセス権がありません。dateFormat のみを設定できます。

4

2 に答える 2

3

Apple ドキュメントには、クエリに対する解決策があります

NSDate* date = [NSDate dateWithTimeIntervalSince1970:123456789];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zzz"];
NSString *dateString = [dateFormatter stringFromDate:date]);

/Bla の部分は、実際のエポック時刻と共に渡される不要な値、つまり 1344433014807 です。これを参照

于 2012-08-28T14:28:14.810 に答える
0

Apple ドキュメントのこのページから、 Unicode Technical StandardNSDateFormatterに従っていることがわかります。そこから、UNIX 時間を指定することはオプションではないことがわかります。

したがって、文字列を分割し、数値を NSTimeInterval に変換して、NSDate に読み込む必要があります。

http://unixtimestamp.comは、これをデバッグするのに非常に役立ちます。1344433014807 が実際にはミリ秒であることに気付くでしょう。

自分で書かなければならなかったので、これがSwiftの実装です。うまくいけば、正しく動作します:)

public func dateFromBlaString(string: String) -> NSDate? {
    if let rangeOfDate = string.rangeOfString("^/Bla\\(", options: .RegularExpressionSearch, range: nil, locale: nil)
        where count(string) >= count("/Bla(") { // avoid out of range error
            let startIndex = advance(string.startIndex, count("/Bla(")
            let suffix = string.substringFromIndex(startIndex) // "1344433014807)/"
            if let parenthesisRange = suffix.rangeOfString(")", options: .LiteralSearch, range: nil, locale: nil) {
                let parenthesisIndex = parenthesisRange.startIndex
                let unixTimeInMillisecondsString = suffix.substringToIndex(parenthesisIndex) // "1344433014807"
                if let unixTimeInMillisecondsDouble = NSNumberFormatter().numberFromString(unixTimeInMillisecondsString)?.doubleValue { // 1344433014807.0
                    let unixTime = NSTimeInterval(unixTimeInMillisecondsInt) / 1000
                    return NSDate(timeIntervalSince1970: unixTime)
                }
            }
    }

    return nil
}
于 2015-06-04T13:29:42.270 に答える