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);
现在我得到了这样的解决方案“2014年2月15日下午04:30”,但我需要这样的“2014年2月15日下午04:30”。也就是说,我希望它说“15th”而不是“15”。
我该怎么做?
答案 0 :(得分:3)
您需要修改NSDateFormatter
文字,这只适用于英语本地化。您也可以一次完成完整的日期/时间格式:
未测试
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];
答案 1 :(得分:1)
试试这个。
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);
答案 2 :(得分:0)
使用以下方法
NSString *myDateString = [self getDateFroMyFormation:[NSDate date]];
NSLog(@"%@", myDateString);
方法代码是
-(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;
}
答案 3 :(得分:0)
如果您更喜欢紧凑型解决方案,那么适合您:
- (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]];
}
答案 4 :(得分:-1)
NSDate * dateTemp = [NSDate date]; NSLog(@“当前日期%@”,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]);