NSCalendar 将 firstWeekDay 设置为星期一但结果不同
NSCalendar set firstWeekDay to monday but results are different
我正在尝试获取一个月的开始日期。
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"begining of month: %@ from today", [self beginningOfMonth:[NSDate date]]);
}
- (NSDate *)beginningOfMonth:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
calendar.locale = [NSLocale currentLocale];
calendar.timeZone = [NSTimeZone defaultTimeZone];
calendar.firstWeekday = 2;
NSDateComponents *componentsCurrentDate = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekday|NSCalendarUnitWeekOfMonth fromDate:date];
NSDateComponents *componentsNewDate = [NSDateComponents new];
componentsNewDate.year = componentsCurrentDate.year;
componentsNewDate.month = componentsCurrentDate.month;
componentsNewDate.weekOfMonth = 1;
componentsNewDate.weekday = calendar.firstWeekday;
return [calendar dateFromComponents:componentsNewDate];
}
但是控制台输出是2015-06-05 10:41:54.544 Test[1119:25066] begining of month: 2015-05-31 16:00:00 +0000
我刚刚看了日历,它应该是 2015-06-01 但它显示 2015-05-31。我确实将 firstWeekday 设置为 2,所以今天是星期一。
看来你得到了正确的结果。根据您 Xcode 安装的时区,控制台将输出不同的日期。
尝试在 NSLog
中使用日期格式化程序。
NSDateFormatter *f = [[NSDateFormatter alloc] init];
NSDate *firstMonday = [self beginningOfMonth:[NSDate date];
NSLog(@"First Monday of month: %@", [f stringFromDate:firstMonday]);
我正在尝试获取一个月的开始日期。
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"begining of month: %@ from today", [self beginningOfMonth:[NSDate date]]);
}
- (NSDate *)beginningOfMonth:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
calendar.locale = [NSLocale currentLocale];
calendar.timeZone = [NSTimeZone defaultTimeZone];
calendar.firstWeekday = 2;
NSDateComponents *componentsCurrentDate = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekday|NSCalendarUnitWeekOfMonth fromDate:date];
NSDateComponents *componentsNewDate = [NSDateComponents new];
componentsNewDate.year = componentsCurrentDate.year;
componentsNewDate.month = componentsCurrentDate.month;
componentsNewDate.weekOfMonth = 1;
componentsNewDate.weekday = calendar.firstWeekday;
return [calendar dateFromComponents:componentsNewDate];
}
但是控制台输出是2015-06-05 10:41:54.544 Test[1119:25066] begining of month: 2015-05-31 16:00:00 +0000
我刚刚看了日历,它应该是 2015-06-01 但它显示 2015-05-31。我确实将 firstWeekday 设置为 2,所以今天是星期一。
看来你得到了正确的结果。根据您 Xcode 安装的时区,控制台将输出不同的日期。
尝试在 NSLog
中使用日期格式化程序。
NSDateFormatter *f = [[NSDateFormatter alloc] init];
NSDate *firstMonday = [self beginningOfMonth:[NSDate date];
NSLog(@"First Monday of month: %@", [f stringFromDate:firstMonday]);