NSDateFormatter 返回完全错误的值
NSDateFormatter gives back totally wrong value
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
.
修改日期格式 YYYY 为 yyyy 你可以得到准确的值
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
yyyy 指定日历年,而 YYYY 指定年份(“一年中的一周”),用于 ISO 年-周历。
在大多数情况下,yyyy 和 YYYY 产生相同的数字,但它们可能不同。通常你应该使用日历年
仅修改日期格式化程序
dd/MM/yyyy
这对我有用。
您需要 "yyyy" 而不是 "YYYY" 和 "dd" 而不是 "DD"。
y = 年
Y = "Week of Year"
年
还有(感谢热舔):
d = 月中的第几天
D = 一年中的第几天
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
.
修改日期格式 YYYY 为 yyyy 你可以得到准确的值
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
yyyy 指定日历年,而 YYYY 指定年份(“一年中的一周”),用于 ISO 年-周历。
在大多数情况下,yyyy 和 YYYY 产生相同的数字,但它们可能不同。通常你应该使用日历年
仅修改日期格式化程序
dd/MM/yyyy
这对我有用。
您需要 "yyyy" 而不是 "YYYY" 和 "dd" 而不是 "DD"。
y = 年
Y = "Week of Year"
还有(感谢热舔):
d = 月中的第几天
D = 一年中的第几天