NSDateFormatter:一年中的一周和第一个工作日

时间:2012-02-20 11:36:05

标签: iphone cocoa nsdateformatter nscalendar

我想从日期获得一个NSString,日期格式如下:

MMEEEY ww

问题在于'ww',即一年中的一周。我必须将这种格式与后一种格式进行比较。但是后台的第一个工作日是星期一,而iOS是星期天。因此,当它是星期天时,字符串不一样,因为一年中的星期不一样。

问题是: 如何强制NSDateFormatter在星期一作为第一个工作日使用?

我尝试使用firstWeekday属性设置为2的日历设置NSDateFormatter的calendar属性,但它不起作用。

这个要点:

NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
calendar.firstWeekday = 2;
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.calendar = calendar;

编辑:Noa回答后的测试

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
NSLocale * locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en"];
dateFormatter.locale = locale;
dateFormatter.dateFormat = @"MMEEEY ww";

NSDate * date = [NSDate dateWithTimeIntervalSince1970:1330251642]; // next sunday

NSLog(@"%@ -> %@", date, [dateFormatter stringFromDate:date]);

NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
calendar.firstWeekday = 2;
dateFormatter.calendar = calendar;

NSLog(@"%@ -> %@", date, [dateFormatter stringFromDate:date]);

结果:

2012-02-24 11:31:27.878 Test[2546:15203] 2012-02-26 10:20:42 +0000 -> 02Sun2012 09
2012-02-24 11:31:27.880 Test[2546:15203] 2012-02-26 10:20:42 +0000 -> 02Sun2012 09

1 个答案:

答案 0 :(得分:1)

根据一些测试,日期格式化程序似乎确实遵守日历设置。也许您可以举例说明您要格式化的日期,您想要的结果以及您获得的结果。

NSDateFormatter * df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MMEEEY ww"];

NSDate *date;
date = [NSDate dateWithString:@"2012-01-01 12:00:00 +0000"];
NSLog(@"%@ -> %@", date, [df stringFromDate:date]);

date = [NSDate dateWithString:@"2012-01-02 12:00:00 +0000"];
NSLog(@"%@ -> %@", date, [df stringFromDate:date]);

NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
calendar.firstWeekday = 2;
df.calendar = calendar;

date = [NSDate dateWithString:@"2012-01-01 12:00:00 +0000"];
NSLog(@"%@ -> %@", date, [df stringFromDate:date]);

date = [NSDate dateWithString:@"2012-01-02 12:00:00 +0000"];
NSLog(@"%@ -> %@", date, [df stringFromDate:date]);

结果:

2012-02-22 12:42:17.020 test[68385:207] 2012-01-01 12:00:00 +0000 -> 01Sun2012 01
2012-02-22 12:42:17.021 test[68385:207] 2012-01-02 12:00:00 +0000 -> 01Mon2012 01
2012-02-22 12:42:17.022 test[68385:207] 2012-01-01 12:00:00 +0000 -> 01Sun2011 52
2012-02-22 12:42:17.022 test[68385:207] 2012-01-02 12:00:00 +0000 -> 01Mon2012 01

我不确定你是否想要2011年第52周的1/1/12部分,但再次,这就是我问你想要什么结果的原因。