2

次のコード

NSCalendar *cal = [NSCalendar currentCalendar];
[cal setFirstWeekday:2];
[cal setMinimumDaysInFirstWeek:4];

NSDateComponents *comp = [[NSDateComponents alloc] init];
[comp setYear: 2012];
[comp setMonth:3];
[comp setDay: 12];
NSDate *date = [cal dateFromComponents:comp];
NSLog(@"date:%@",date);

ログ:

date:2012-03-11 23:00:00 +0000

任意のアイデア、これが発生する理由とTnxを回避する方法

4

3 に答える 3

2

CETタイムゾーンをローカルで使用していると思います。これは、[NSCalendar currentCalendar]がタイムゾーンとして使用するものです。

NSDateNSLogを使用してをダンプすると、日付が未加工のUTC形式で取得されます。ローカル形式を使用して日付を印刷するには、次のプロパティNSDateFormatterを持つクラスを調べます。timeZone

....
NSDate *date = [cal dateFromComponents:comp];
NSDateFormatter* fmt = [[NSDateFormatter alloc] init];
fmt.timeZone = [NSTimeZone defaultTimeZone]; // Probably not required
NSLog(@"date:%@", [fmt stringFromDate:date]);
于 2012-03-17T15:36:39.597 に答える
2

タイムゾーンを設定する

NSCalendar *cal = [NSCalendar currentCalendar];

[cal setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
于 2012-03-17T15:40:40.310 に答える
2

電話をかけるdateFromComponents:と、すべてのタイムゾーンとカレンダー情報が失われ、日付コンポーネントが表す瞬間を含むNSDateオブジェクトが残りますが、それ以外は何もありません。NSDateオブジェクトで使用する場合NSLog、その瞬間はUTCの時刻に変換され、人間が読める文字列としてレンダリングされます。

これを回避する方法に関する2番目の質問に答えられるようにするには、達成しようとしていることについてより多くの情報を提供する必要があります。

于 2012-03-17T15:45:12.847 に答える