1

オブジェクトに変換しようとしNSStringましたが、奇妙な値が返されました。NSDateNSDateFormatter

コードは次のとおりです。

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm"]; 
NSDate *date = [dateFormat dateFromString:@"2012-08-15 00:00"];
[dateFormat release];

date値は2012-08-14 21:00 +0000NSString値と値の差は 3 時間NSDateです。私は何かを逃したと思いますが、何がわかりません。

4

4 に答える 4

6

これは私が使用するものです:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"]; 

NSDate *date = [dateFormat dateFromString:@"2012-08-15 00:00:00 +0000"];
NSLog(@"\n\n  DATE: %@ \n\n\n", date);

+0000タイムゾーンなので、のように自分のタイムゾーンを使用してください+0400

編集:文字列を変更できない場合は、次のコードを使用して変更できます。

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm"]; 
[dateFormat setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

NSDate *date = [dateFormat dateFromString:@"2012-08-15 00:00"];
于 2012-07-10T08:10:11.777 に答える
0

NSDateがGrinwichの時間を保持していることを知っていたので、モスクワのタイムゾーンにいる場合は、すべてが正しいです。

于 2012-07-10T08:05:33.790 に答える
0

setTimeZone を設定しなかった場合、NSDate の目的 c では、NSDate はデフォルトのタイムゾーンを localTimeZone として取得します。したがって、NSString 文字列形式として指定した正確な日付を取得する必要がある場合は、TimeZone を UTC として設定する必要があります。サンプルコードに従ってください。役に立つと思います。

NSDateFormatter *loacalformatter=[[NSDateFormatter alloc]init];
[loacalformatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *localDate =[loacalformatter dateFromString:@"2012-08-15 00:00"];
NSLog(@"localDate :%@",localDate);


NSDateFormatter *UTCformatter=[[NSDateFormatter alloc]init];
[UTCformatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[UTCformatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *UTCDate =[UTCformatter dateFromString:@"2012-08-15 00:00"];
NSLog(@"UTCDate :%@",UTCDate);
UTCDate :2012-08-15 00:00 +0000 (GMT+00:00)
于 2013-08-10T04:15:49.193 に答える
-1

コメントで示唆されているように、受け取った日付が UTC の場合は、それをローカル タイムゾーンに変換する必要があります。Apple は、ローカライズの問題を処理するために、日付を表示するときに常に適切に構成された NSDateFormatter を使用することをお勧めします。

NSDate を NSString に変換するコードの例を次に示します。

NSDate *date = // initialised elsewhere

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
dateFormat.locale = [NSLocale currentLocale];
dateFormat.timeZone = [NSTimeZone localTimeZone];
dateFormat.timeStyle = NSDateFormatterShortStyle;
dateFormat.dateStyle = NSDateFormatterShortStyle;    
dateFormat.locale = [NSLocale currentLocale];
NSString *dateAsString = [dateFormat stringFromDate:date];
于 2012-07-10T08:19:45.647 に答える