8

私のマシン(地域設定は米国)では、デフォルトの「短い」日付形式は「1/5/13」(月/日/年)に設定されています。

システム環境設定で、週番号「1/5/13 1」を追加しました。

私の問題は、文字列を日付に変換しようとするこのコードです。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
NSDate *date = [dateFormatter dateFromString:@"1/5/13 1"];
NSLog(@"Date: %@", date);

私のマシンでは、これは次のように出力されます。

Date: 2000-01-01 05:00:00 +0000

それは2000 年であり、 2013 年にさえ近づいていません。

この問題の原因は何ですか?

4

3 に答える 3

9

私はこの議論に遅れており、提供された多くの解決策を見てきましたが、それらすべてに問題があると思われるのは、2 つの互換性のない日付形式要素が一緒に使用されていることです。日付を取得しようとしている文字列がNSDateFormatterShortStyle提供するものと一致しないため、元のアプローチは失敗しました。

年の週を評価する場合は、年の大文字の形式を使用する必要があります。これにより、「年間の週」の種類のカレンダーが提供されます。

元のコードを少し作り直して、新しい形式を含めましょう。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM/dd/YY w"];
NSDate *date = [dateFormatter dateFromString:@"1/5/13 1"];
NSLog(@"Date: %@", date);

年には大文字の形式を使用していることに注意してください。年の週を 1 とすると、次のようになります。

Date: 2013-01-05 08:00:00 +0000

年の週を表す 2 を使用します。

Date: 2013-01-12 08:00:00 +0000

と 3:

Date: 2013-01-19 08:00:00 +0000

理にかなっていますよね?日付の日は、年の週の 1 つが増えるごとに 7 日ずつ増えます。もちろん、時間はありませんが、その分野で評価することについて話し合ったことはありませんよね?

于 2013-08-20T05:06:20.550 に答える
2
NSDateComponents *cmp=[[[NSDateComponents alloc]init]autorelease];
[cmp setWeek:1];
NSCalendar *cal=[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSDate *dte=[NSDate date];
NSDate *weekDate=[cal dateByAddingComponents:cmp toDate:dte options:0];
[dateFormatter setDateFormat:@"MM/dd/YY"];
NSString *strDate=[dateFormatter stringFromDate:weekDate];
NSLog(@"Date: %@", strDate);
于 2013-08-20T08:31:23.443 に答える
-1

...dateFromStringの方法を使用する必要がありますNSDateFormatter

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"mm/dd/yyyy"];
NSDate *myDate = [dateFormatter dateFromString:@"1/5/2013"];
NSLog(@"Date: %@", myDate);

週番号で遊びたい場合は、必要に応じて and を使用NSCalendarNSDateComponentsてください... (このコードスニペットを参照してください)

NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:NSWeekCalendarUnit fromDate:date];
NSInteger week = [components week];

これが役立つことを願っています。

于 2013-08-12T18:51:19.907 に答える