سؤال

NSDate *date = [NSDate date];

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
dateFormat.dateFormat = @"MMMM FF yyyy";

NSString *dateStr = [dateFormat stringFromDate:date];

NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
timeFormat.dateFormat = @"HH:mm aa";

NSString *timeStr = [[timeFormat stringFromDate:date] lowercaseString];

NSLog(@"%@ at %@", dateStr, timeStr);

Now I got my solution like this "February 15 2014 at 04:30 pm" but I need like this "February 15th 2014 at 04:30 pm". That is, I want it to say "15th" instead of just "15".

How do I do that?

هل كانت مفيدة؟

المحلول 2

try this.

NSString *suffix_string = @"|st|nd|rd|th|th|th|th|th|th|th|th|th|th|th|th|th|th|th|th|th|st|nd|rd|th|th|th|th|th|th|th|st";
NSArray *suffixes = [suffix_string componentsSeparatedByString: @"|"];

NSDateFormatter *monthDayFormatter = [[NSDateFormatter alloc] init];
[monthDayFormatter setDateFormat:@"d"];

NSDateFormatter *dateFormateHeader = [[NSDateFormatter alloc]init];

int date_day = [[monthDayFormatter stringFromDate:[NSDate date]] intValue];
NSString *suffix = [suffixes objectAtIndex:date_day];

[dateFormateHeader setDateFormat:[NSString stringWithFormat:@"MMMM d'%@' yyyy' at 'hh:mm a",suffix]];

NSString *prefixDateString = [dateFormateHeader stringFromDate:[NSDate date]];

NSLog(@"%@",prefixDateString);

نصائح أخرى

You'll need to modify the NSDateFormatter literal, and this will only work for english localizations. You can also do the complete date/time formatting in one pass:

untested

NSTimeZone *tz = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];   // or whatever
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setTimeZone:tz];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:tz];
[formatter setCalendar:calendar];

NSDate *date = [NSDate date];

NSDateComponents *comps = [calendar components:NSDayCalendarUnit
                                      fromDate:date];

// 1 = st
// 2 = nd
// 3 = rd
// 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 = th
// 21 = st
// 22 = nd
// 23 = rd
// 24,25,26,27,28,29,30 = th
// 31 = st

NSString *suffix;
if (comps.day == 11) {
    suffix = @"th";
} else {
    switch (comps.day % 10) {
    case 1: suffix = @"st"; break;
    case 2: suffix = @"nd"; break;
    case 3: suffix = @"rd"; break;
    default: suffix = @"th"; break;
    }
}

formatter.dateFormat = [NSString stringWithFormat:@"MMMM d'%@' yyyy 'at' hh:mm aa", suffix];

NSString *timeStr = [formatter stringFromDate:date];

if you'd prefer compact solutions, that makes the proper job for you:

- (NSString *)formattedDateFrom:(NSDate *)date {
    NSDateFormatter *_dateFormatter = [[NSDateFormatter alloc] init];
    [_dateFormatter setPMSymbol:@"pm"];
    [_dateFormatter setAMSymbol:@"am"];
    [_dateFormatter setDateFormat:@"MMMM dd'%@' YYYY 'at' hh:mm aa"];
    return [NSString stringWithFormat:[_dateFormatter stringFromDate:date], [[@"st,nd,rd,th,th,th,th,th,th,th,th,th,th,th,th,th,th,th,th,th,st,nd,rd,th,th,th,th,th,th,th,st" componentsSeparatedByString:@","] objectAtIndex:[[NSCalendar currentCalendar] components:NSDayCalendarUnit fromDate:date].day]];
}

USe following method

NSString *myDateString = [self getDateFroMyFormation:[NSDate date]];
NSLog(@"%@", myDateString);

And method code is

-(NSString *)getDateFroMyFormation:(NSDate *)todayDate
{
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSInteger units = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit  | NSMinuteCalendarUnit | NSSecondCalendarUnit ;
    NSDateComponents *dateComponents = [gregorian components:units fromDate:todayDate];
    NSInteger hour = [dateComponents hour];
    NSInteger minute = [dateComponents minute];
    NSInteger day = [dateComponents day];
    NSInteger year = [dateComponents year];

    NSDateFormatter *calMonth = [[NSDateFormatter alloc] init];
    [calMonth setDateFormat:@"MMMM"];

    NSDateFormatter *hourTimer = [[NSDateFormatter alloc] init];
    [hourTimer setDateFormat:@"a"];

    NSString *strDay = @"";
    if (day>0)
    {
        if (day == 1 || day == 21 || day == 31)
            strDay = [NSString stringWithFormat:@"%dst",day];
        else if (day == 2 || day == 22)
            strDay = [NSString stringWithFormat:@"%dnd",day];
        else if (day == 3 || day == 23)
            strDay = [NSString stringWithFormat:@"%drd",day];
        else
        {
            strDay = [NSString stringWithFormat:@"%dth",day];
        }
    }

    //"February 15th 2014 at 04:30 pm"
    NSString *strDateFormation = [NSString stringWithFormat:@"%@ %@ %d  at %d:%d  %@",  [calMonth stringFromDate:todayDate], strDay, year, hour, minute, [hourTimer stringFromDate:todayDate]];
    return strDateFormation;
}

NSDate *dateTemp = [NSDate date]; NSLog(@"Current date%@",dateTemp);

NSDateFormatter *dateFormat2 = [[NSDateFormatter alloc] init];
[dateFormat2 setDateStyle:NSDateFormatterMediumStyle];

NSLog(@"NSDateFormatterMediumStyle %@",[dateFormat2 stringFromDate:dateTemp]);
NSArray *arr =[[dateFormat2 stringFromDate:dateTemp] componentsSeparatedByString:@","];

NSLog(@"%@th %@",[arr objectAtIndex:0],[arr objectAtIndex:1]);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top