将2个NSDateFormatters合二为一

时间:2013-11-13 15:38:30

标签: ios json nsdateformatter

目前我的应用程序中有两个NSDateFormatters,我想以某种方式“组合”它们,所以我只有,因为它们正在解析相同的日期。

我有一个名为UpcomingReleases的NSObject,这就是我存储所有JSON信息的地方。

UpcomingRelease.h

- (NSString *) formattedDate;

UpcomingRelease.m

- (NSString *) formattedDate {
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"];
    NSDate *readableDate = [dateFormatter dateFromString:self.release_date];

    [dateFormatter setDateFormat:@"MMMM dd"];
    return [dateFormatter stringFromDate:readableDate];
}

我的UICollectionViewController(UpcomingReleasesViewController.m)

if([upcomingReleaseDictionary objectForKey:@"release_date"] != NULL)
{
    NSString *readableDate = [upcomingReleaseDictionary objectForKey:@"release_date"];
    UpcomingRelease *upcoming = [[UpcomingRelease alloc] init];
    upcoming.release_date = readableDate;

    cell.release_date.text = [NSString stringWithFormat:@"%@", upcoming.formattedDate];
}

我的detailViewController(ReleaseViewController.m)

(_ singleRelease是NSDictionary)

- (void)viewDidLoad
{
    [super viewDidLoad];

    if([_singleRelease objectForKey:@"release_date"] != NULL)
    {
        NSString *readableDate = [_singleRelease objectForKey:@"release_date"];
        UpcomingRelease *singleRelease = [[UpcomingRelease alloc] init];
        singleRelease.release_date = readableDate;

        self.release_date.text = [NSString stringWithFormat:@"%@", singleRelease.formattedDate];
    }
}

这很好用,直到我添加了一个关于twitter动作的共享,我不得不添加另一个NSDateFormatter,因此它可以显示推文内的可读日期(我会收到错误说“没有可见的ReleaseViewController接口声明所选的' formattedDate'“否则)。

- (NSString *) formattedDate:(NSString *)jsonDateString {
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"];
    NSDate *readableDate = [dateFormatter dateFromString:jsonDateString];

    [dateFormatter setDateFormat:@"MMMM dd"];

    return [dateFormatter stringFromDate:readableDate];
}

#pragma mark - Share on twitter
- (IBAction)shareOnTwitter:(id)sender {
    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
    {
        SLComposeViewController *tweetSheet = [SLComposeViewController
                                               composeViewControllerForServiceType:SLServiceTypeTwitter];
        NSString *formattedDate = [self formattedDate:[_singleRelease objectForKey:@"release_date"]];
        [tweetSheet setInitialText:[NSString stringWithFormat:@"%@", formattedDate]];

        [self presentViewController:tweetSheet animated:YES completion:nil];
    }
}

如何将这两个NSDateFormatters合二为一?它们都以相同的方式解析相同的字符串(如果有更好的方式来显示formattedDate字符串而不是我目前正在做的那个字符串会很棒)。

这就是我的JSON显示日期字符串的方式:

release_date: "2013-11-16T00:00:00.000Z"

感谢。

1 个答案:

答案 0 :(得分:0)

正如@Hot Licks所说:

使日期格式化程序成为类方法:

+ (NSString *) formattedDate:(NSString *)jsonDateString {
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"];
    NSDate *readableDate = [dateFormatter dateFromString:jsonDateString];

    [dateFormatter setDateFormat:@"MMMM dd"];
    return [dateFormatter stringFromDate:readableDate];
}

将它放在实用程序类中并在两种情况下都使用它。在第一种情况下,只需传入self.release_date