【问题标题】:Problems formatting dates日期格式化问题
【发布时间】:2013-06-03 22:43:59
【问题描述】:

这里是设置,我有一个我正在使用的 JSON 提要,我想找出两个名为 posted_dateplanned_expiration_date 的特定日期之间的差异。它们的格式很奇怪,所以我想我可以将它们截断为日期。然后我可以使用NSTimeInterval 来查找以秒为单位的差异。

// Time Interval Left
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
NSString *startDate = [firstPerson objectForKey:@"posted_date"];
NSString *endDate = [firstPerson objectForKey:@"planned_expiration_date"];

//Ammend the strings to YYYY-MM-DD
[formatter setDateFormat:@"yyyy-mm-dd"];
int newlength = 9;
NSDate *startDateAmmended =[formatter dateFromString:[startDate substringFromIndex:newlength]];
NSDate *endDateAmmended = [formatter dateFromString:[endDate substringFromIndex:newlength]];

这是我不太确定的一点。日期直接从提要中显示为"2013-06-07T13:40:01Z"。我不知道如何处理日期格式化程序方法中的 T 和 Z 字符,所以我用 substringFromIndex 截断字符串使其变为 10 个字符,然后尝试以下代码。

//Difference in Date
NSTimeInterval *startDifference = [startDateAmmended timeIntervalSinceNow];
NSTimeInterval *endDifference = [endDateAmmended timeIntervalSinceNow];

NSTimeInterval timeDifferenceInSeconds = startDifference - endDifference;

我在前两次调用NSTimeInterval 时收到以下错误.../JSONParser/ViewController.m:52:21: Initializing 'NSTimeInterval *' (aka 'double *') with an expression of incompatible type 'NSTimeInterval' (aka 'double')

我确信我在一些地方出错了,而且我确信这不是最简单的方法。谁能推荐我如何解决这个问题或者更简单的方法来获取日期之间的差异?

【问题讨论】:

标签: objective-c nsdate nstimeinterval


【解决方案1】:

您可以像这样得到两个NSDate 对象之间的秒差:

double difference = [startDateAmmended timeIntervalSinceDate:endDateAmmended];

请注意,使用子字符串操作您没有时间,只有日期,因此difference 将以秒为单位,但步长为一整天。

【讨论】:

    【解决方案2】:

    你的错误来自你的台词:

    NSTimeInterval *startDifference = [startDateAmmended timeIntervalSinceNow];
    NSTimeInterval *endDifference = [endDateAmmended timeIntervalSinceNow];
    

    他们应该是:

    NSTimeInterval startDifference = [startDateAmmended timeIntervalSinceNow];
    NSTimeInterval endDifference = [endDateAmmended timeIntervalSinceNow];
    

    或者,更简单地说,根本不定义这两个差异变量,只需使用:

    NSTimeInterval timeDifferenceInSeconds = [endDateAmmended timeIntervalSinceDate:startDateAmmended];
    

    要计算两个ISO 8601 / RFC 3339 日期字符串之间的差异,您可以这样做:

    NSDate *startDate = [self dateFromISO8601String:@"2013-06-01T16:27:35Z"];
    NSDate *endDate   = [self dateFromISO8601String:@"2013-06-07T13:40:01Z"];
    
    NSTimeInterval elapsed = [endDate timeIntervalSinceDate:startDate];
    NSLog(@"Time elapsed (in seconds) is %.0f", elapsed);
    

    其中dateFromISO8601String 定义为:

    - (NSDate *)dateFromISO8601String:(NSString *)string
    {
        static NSDateFormatter *formatter = nil;
        if (formatter == nil)
        {
            formatter = [[NSDateFormatter alloc] init];
            NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
            formatter.locale = enUSPOSIXLocale;
            formatter.dateFormat = @"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'";
            formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
        }
        return [formatter dateFromString:string];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      相关资源
      最近更新 更多