2009-08-12 10 views

答えて

3

ここでは推測していますが、JSON値は1970年以降のミリ秒数です。 NSDateのdateWithTimeIntervalSince1970:メソッドを使用すると、正しい時刻のNSDateオブジェクトを返すことができます。 NSDateに渡す前にJSONのミリ秒数を秒に変換してください.Cocoaはほとんどの場所でNSTimeIntervalを使用します(秒単位の間隔です)。

+0

ありがとうございました。それは私のために働いた。 NSDateをクライアントのローカルタイムゾーンに表示する方法を知っていますか? –

+0

また、NSNETのwebserviceに送信されるJSONオブジェクトを準備するために、NSDateからDate(ticks)に戻る方法も知っていますか? –

0

クライアントのロケールを検出できるようにする必要があります。クライアントがその方法を知っていなければ、あまり意味がありません。

NSDateのdescriptionWithLocale:別のロケール用にフォーマットする方法です。 timeIntervalSince1970は1970年以来(秒)に戻ります。これを1000倍してmsをクライアントに返すことができます。それはすべてNSDateのドキュメントにあります。

http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html

2

それは大体このように書き:このページによると

// Input string is something like: "/Date(1292851800000+0100)/" where 
// 1292851800000 is milliseconds since 1970 and +0100 is the timezone 
NSString *inputString = [item objectForKey:@"DateTimeSession"]; 

// This will tell number of seconds to add according to your default timezone 
// Note: if you don't care about timezone changes, just delete/comment it out 
NSInteger offset = [[NSTimeZone defaultTimeZone] secondsFromGMT]; 

// A range of NSMakeRange(6, 10) will generate "1292851800" from "/Date(1292851800000+0100)/" 
// as in example above. We crop additional three zeros, because "dateWithTimeIntervalSince1970:" 
// wants seconds, not milliseconds; since 1 second is equal to 1000 milliseconds, this will work. 
// Note: if you don't care about timezone changes, just chop out "dateByAddingTimeInterval:offset" part 
NSDate *date = [[NSDate dateWithTimeIntervalSince1970: 
       [[inputString substringWithRange:NSMakeRange(6, 10)] intValue]] 
       dateByAddingTimeInterval:offset]; 

https://gist.github.com/726910から)

+0

このソリューションは壊れやすいです。数字がちょうど13桁(マイクロ秒をドロップすると10桁)の場合にのみ機能します。 2001年9月以前のすべての日付では動作しません。 –

+0

Martin、あなたは正しいです。私は参照された要点のリンクがより多くの文脈を提供することを望む。 – Ali

関連する問題