【问题标题】:NSDate Outputs Wrong DateNSDate 输出错误的日期
【发布时间】:2014-09-08 02:51:05
【问题描述】:

我正在使用NSDateNSDateFormatter 创建一个特定日期的倒数计时器。唯一的问题是,当我以不同的格式运行代码时,日期会混乱。这是运行良好的原始代码。

- (void)updateCountdown {
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"YYYY-MM-dd"];
    NSDate *startingDate = [dateFormatter dateFromString:@"2014-10-08"];
    NSDate *endingDate = [NSDate date];

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSUInteger unitFlags = NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit;
    NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:startingDate toDate:endingDate options:0];

    NSInteger days     = [dateComponents day];
    NSInteger months   = [dateComponents month];
    NSInteger years    = [dateComponents year];
    NSInteger hours    = [dateComponents hour];
    NSInteger minutes  = [dateComponents minute];
    NSInteger seconds  = [dateComponents second];
    NSString *countdownText = [NSString stringWithFormat:@"%ld Years %ld Months %ld Days %ld Hours %ld Minutes %ld Seconds", (long)days, (long)months, (long)years, (long)hours, (long)minutes, (long)seconds];

    _countdown.text = countdownText;

    [self performSelector:@selector(updateCountdown) withObject:nil afterDelay:1];
}

但是说我想删除年份,所以我像这样更改代码:

- (void)updateCountdown {
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"YYYY-MM-dd"];
    NSDate *startingDate = [dateFormatter dateFromString:@"2014-10-08"];
    NSDate *endingDate = [NSDate date];

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSUInteger unitFlags = NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit;
    NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:startingDate toDate:endingDate options:0];

    NSInteger days     = [dateComponents day];
    NSInteger months   = [dateComponents month];
    NSInteger hours    = [dateComponents hour];
    NSInteger minutes  = [dateComponents minute];
    NSInteger seconds  = [dateComponents second];
    NSString *countdownText = [NSString stringWithFormat:@"%ld Months %ld Days %ld Hours %ld Minutes %ld Seconds", (long)days, (long)months, (long)hours, (long)minutes, (long)seconds];

    _countdown.text = countdownText;

    [self performSelector:@selector(updateCountdown) withObject:nil afterDelay:1];
}

现在突然间,数据被整整一个月搞砸了。我该如何解决这个问题?

还有为什么输出 0 years -1months 0 days -2 Hours .. 就像为什么那里有 (-) 一样?谢谢!

【问题讨论】:

    标签: objective-c format nsdate countdown


    【解决方案1】:

    您的论点顺序错误 首先你有

    [NSString stringWithFormat:@"%ld Years %ld Months %ld Days %ld Hours %ld Minutes %ld Seconds", (long)days, (long)months, (long)years, (long)hours, (long)minutes, (long)seconds];
    

    你正在输入

    • 占位符年的天数
    • 数年变成数天

    那么你有

    [NSString stringWithFormat:@"%ld Months %ld Days %ld Hours %ld Minutes %ld Seconds", (long)days, (long)months, (long)hours, (long)minutes, (long)seconds];
    

    你正在输入

    • 占位符月份的天数
    • 几个月到位举行几天 只有最后 3 个符合您的预期

    【讨论】:

    • 呃!非常感谢!你也知道为什么输出是 -1 Days -2 Hours -1 Minutes 吗?就像你知道为什么会有负面影响吗?非常感谢!
    • 好吧,负面因素可能与倒计时有关。所以如果我倒计时到昨天,那将是 -1 天等等。看看你的代码,也许你正在比较你的 2 个日期以按错误的顺序进行比较。这是我的猜测。
    • 是的,我也是这么想的,只是我的日期是在未来!大声笑
    • 我没有使用你必须比较日期的方法。我使用 timeIntervalSinceDate 返回两个参考日期之间的秒数。然后我计算出多少年月周日时分秒
    猜你喜欢
    • 2015-06-28
    • 2017-06-19
    • 2013-12-16
    • 2014-01-18
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多