NSDateFormatter给出了完全错误的值

时间:2015-01-12 12:05:54

标签: ios objective-c nsdate nsdateformatter

enter image description here

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中的值。 即使我设置了refreshDateNSTimeZone,问题仍然是NSCalendar给出了完全错误的值。

3 个答案:

答案 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 =一年中的某一天

请参阅:ICU Formatting Dates and Times