在Obj-C中将24h转换为12h时间格式

run*_*mad 1 objective-c nsdate nsdateformatter

我目前以24小时格式显示时间,因为对我来说这对我现有的数据来说是最简单的事情.

我在"午夜以来的分钟"中得到时间,例如,07:00或7:00 am是"420",21:30或9:30 pm是"1290",依此类推.

[NSString stringWithFormat:@"%02d:%02d - %02d:%02d", (open / 60), (open % 60), (close / 60), (close % 60)]
Run Code Online (Sandbox Code Playgroud)

有没有一种很好的方法来使用NSDateFormatter将24h转换为12h?我尝试了很多东西,但我从来没有得到100%正确的格式.

我也尝试了很多if语句,但最终只能得到太多代码行,在我看来这对于这样一个相对"简单"的工作来说应该是完全没有必要的.

此外,无论我尝试我也最终错误的12小时格式化开始时没有"1",例如"09:30 am"等等.我可以通过寻找后缀来剥离这个,但这只是看起来似乎乏味和怪异.

Ale*_*dro 11

您应该使用系统的默认日期格式:

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setHour:hours];
[comps setMinute:minutes];
NSDate* date = [[NSCalendar currentCalendar] dateFromComponents:comps];
NSString* dateString = [NSDateFormatter localizedStringFromDate:date dateStyle:NSDateFormatterNoStyle timeStyle:NSDateFormatterLongStyle];
Run Code Online (Sandbox Code Playgroud)

或者,如果你坚持,你可以做

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"hh:mm a"];
NSString* dateString = [dateFormatter stringFromDate:date];
Run Code Online (Sandbox Code Playgroud)

  • 或者您可以将格式设置为"@"h:mm a"`(一个'h') (2认同)