2016-12-11 3 views
1

Swift Dateオブジェクトを "/ Date(631148400000 + 0100)/"のような日付のティック文字列に変換する必要があります。Swiftの日付を "/ Date(631148400000 + 0100)/"に変換

次のリンクは、日付をDateオブジェクトではなく、その逆に文字列をティック変換する方法を私に伝えます: How to convert date like \/Date(1440156888750-0700)\/ to something that Swift can handle?

私はそれをどのように行うことができますか? ありがとうございます。 Stand-Alone JSON Serializationから

+0

_dateとは何ですか?string_? – OOPer

+0

@OOPerはMicrosoftの形式です。 http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx – ali9091

+0

Swift(NS)Dateにはタイムゾーン情報がありません。宛先タイムゾーンはどのように定義されていますか? – vadian

答えて

0

日時値は、最初の番号(提供された例で700000)は、ミリ秒単位の数であり、「/(+ 0500 700000)/日」の形でJSON文字列として表示されますGMTタイムゾーンでは、1970年1月1日午前0時からの通常の(非夏時間の)時間です。この数値は、以前の時刻を表すために負の値になる場合があります。この例の "+0500"で構成される部分はオプションで、時刻がローカルの種類であることを示します。つまり、逆シリアル化時にローカルのタイムゾーンに変換する必要があります。存在しない場合、時刻はUtcとして逆シリアル化されます。実際の数字(この例では "0500")とその記号(+または - )は無視されます。

そしてUse JSON.NET to parse json date of format Date(epochTime-offset)

から...このscrewy formatでは、タイムスタンプの部分はまだ、単にUTCに基づいています。オフセットは余分なの情報です。タイムスタンプは変更されません。別のオフセットを与えることもできますし、完全に省略することもできますが、それは同じ瞬間です。

したがって、ティックの数は、Januar 1 1970 GMTからのミリ秒数です。

extension Date { 
    var jsonDate: String { 
     let ticks = lround(timeIntervalSince1970 * 1000) 
     return "/Date(\(ticks))/" 
    } 
} 

例:

print(Date().jsonDate) // /Date(1481446227993)/ 
時間帯指定を追加するだけ 日付 .NETでローカルを提示し、JSONの日付文字列を生成する際に一方が単にその一部 を省略することができるどのように変化します
+1

問題はタイムゾーンです。 APIは、タイムゾーンを含む "/ Date(631148400000 + 0100)/"を返しています。 – ali9091

+0

ありがとうございます。 – ali9091

関連する問題