if (component != kDayComponent)
{
NSInteger i_d = [_datePicker selectedRowInComponent:kDayComponent],
i_m = [_datePicker selectedRowInComponent:kMonthComponent],
i_y = [_datePicker selectedRowInComponent:kYearComponent];
NSString *d = _days[i_d];
// NSString *m = [_months[i_m] length] == 1 ? [NSString stringWithFormat:@"0%@", _months[i_m]] : _months[i_m];
NSString *m = i_m+1 < 10 ? [NSString stringWithFormat:@"0%d", i_m+1] : [NSString stringWithFormat:@"%d", i_m+1];
NSInteger y = [_years[i_y] integerValue];
NSString *completeDate = [NSString stringWithFormat:@"%@/%@/%ld", d, m, (long)y];
NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setCalendar:[NSCalendar autoupdatingCurrentCalendar]];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
[dateFormatter setDateFormat:@"DD/MM/YYYY"];
NSDate *refreshDate = [dateFormatter dateFromString:completeDate];
// NSDate *refreshDate = [self dateFromMonth:m.integerValue+1
// andYear:y
// andDay:d.integerValue+1];
NSLog(@"refreshDate: %@", refreshDate.description);
[self refreshDaysFromDate:refreshDate];
}
正如您所看到的,completeDate
具有正确的字符串日期值,我正在尝试使用NSDateFormatter
对其进行格式化并保留refreshDate
中的值。
即使我设置了refreshDate
或NSTimeZone
,问题仍然是NSCalendar
给出了完全错误的值。
答案 0 :(得分:3)
将日期格式化程序 YYYY 修改为 yyyy ,您可以获得准确的值
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
yyyy 指定日历年,而 YYYY 指定ISO年 - 周日历中使用的年份(“年度周”)。
在大多数情况下, yyyy 和 YYYY 会产生相同的数字,但它们可能会有所不同。通常,您应该使用日历年
答案 1 :(得分:1)
仅修改日期格式化程序
dd/MM/yyyy
这对我有用。
答案 2 :(得分:1)
你需要&#34; yyyy&#34;不是&#34; YYYY&#34;和&#34; dd&#34;不是&#34; DD&#34;。
y =年
Y =年份&#34;年度周&#34;
也(热门舔):
d =每月的日期
D =一年中的某一天