0

を表すdouble値がありNSTimeIntervalます。double値から正しい日付を作成したいのですが、これが私のコードです。出力を取得していますが、実際の値からいくつかの変更があります。

NSString *modiDate = [NSString stringWithFormat:@"1338229800"]; //example time interval value

NSNumber *time = [NSNumber numberWithDouble:([modiDate doubleValue] - 3600)];
NSTimeInterval interval = [time doubleValue];    
NSDate *online = [NSDate date];
online = [NSDate dateWithTimeIntervalSince1970:interval];    
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"];

NSLog(@"result: %@", [dateFormatter stringFromDate:online]);

ここで何が悪かったのですか?何か案が?

編集: 最初にテストするために、私は日付をに変換し、日付をNSTimeInterval取り戻そうとしました。コードと出力は次のとおりです。

NSString *modDate = [NSString stringWithFormat:@"5/30/2012 2:02:55 PM"];

NSDateFormatter *format = [[NSDateFormatter alloc]init];
[format setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"];
NSDate *dateFromString1 = [[NSDate alloc] init];
dateFromString1 = [format dateFromString:modDate];
[format release];
NSTimeInterval timeInterval1 = [dateFromString1 timeIntervalSince1970];

NSLog(@"timeinterval : %f",timeInterval1);

NSDate *online = [NSDate date];
online = [NSDate dateWithTimeIntervalSince1970:timeInterval1];    
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"];

NSLog(@"result: %@", [dateFormatter stringFromDate:online]);

出力は次のとおりです。

 result: 05/30/2012 12:02:55 PM actual date:5/30/2012 2:02:55 PM
4

3 に答える 3

4

まず、NSTimeIntervalはfloatであるため、NSStringまたはNSNumberを使用する必要はありません(NSNumberは、辞書または配列に数値を格納するために作成されます)。

次のようにコードを簡略化できます。

NSTimeInterval interval = 1338229800;
interval -= 3600;
NSDate *online = [NSDate dateWithTimeIntervalSince1970:interval];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"];
NSLog(@"result: %@", [dateFormatter stringFromDate:online]);

これは私に与えます:05/28/2012 19:30:00 PM

初期値:1338229800マイナス1時間(-3600秒)に相当します。

編集 :

あなたの編集では、あなたの書き込み:

NSString *modDate = [NSString stringWithFormat:@"5/30/2012 2:02:55 PM"];
NSDateFormatter *format = [[NSDateFormatter alloc]init];
[format setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"];

ただし、日付形式のパターンページを確認する必要が
2:02:55 PMあり@"h:mm:ss a"ます。"HH:mm:ss aaa"

于 2012-05-30T09:55:37.793 に答える
1

このコードには多くの問題があります。

これらすべてのオブジェクトを作成する理由:

NSString *modiDate = [NSString stringWithFormat:@"1338229800"]; //example time interval value
NSNumber *time = [NSNumber numberWithDouble:([modiDate doubleValue] - 3600)];
NSTimeInterval interval = [time doubleValue];   

これが同じ場合:

 NSString *modiDate = [NSString stringWithFormat:@"1338229800"];
 NSTimeInterval interval = [modiDate doubleValue]  - 3600;

ここでは、オンラインに新しい日付を割り当てます。

NSDate *online = [NSDate date];

ここで他の日付をオンラインに設定するだけです:

online = [NSDate dateWithTimeIntervalSince1970:interval];  

あなたはこれをするべきでした:

NSDate *online = [NSDate dateWithTimeIntervalSince1970:interval];  

このコードで何が問題になるかは確かですが、正しく機能します。ロケールを設定する必要があるかもしれませんが、実際には必要ありませんが、ローカリゼーションに何らかの影響を与える可能性があります。

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
dateFormatter.locale = [NSLocale systemLocale];
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"];

NSLog(@"result: %@", [dateFormatter stringFromDate:online]);

編集から新しいコードを追加しました

編集で次のコードを追加しました:

NSDate *dateFromString1 = [[NSDate alloc] init];
dateFromString1 = [format dateFromString:modDate];

NSDateここであなたはオブジェクトを漏らしています、これをするだけです:

NSDate *dateFromString1 = [format dateFromString:modDate];

そして、マーティンによる答えの状態として、問題は時間形式の文字列にあります。

于 2012-05-30T09:57:33.780 に答える
0

あなたは24時間のHHを使用しています。代わりに、AM / PM形式に適したhh(0〜12)を使用してください。

于 2012-05-30T10:09:57.067 に答える