我目前以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)]
有没有一种很好的方法可以使用NSDateFormatter从24h转换为12h?我尝试了很多东西,但我从来没有得到100%正确的格式化。
我也尝试了很多if语句,但最后的代码行太多了,在我看来这对于这样一个相对“简单”的工作来说应该是完全没有必要的。
此外,无论我尝试,我最终都会错误地将12h格式化为开始时没有“1”的小时,例如“09:30 am”等。我可以通过查找后缀来删除它,但是这似乎很乏味和怪异。
答案 0 :(得分: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];
或者,如果你坚持可以做到
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"hh:mm a"];
NSString* dateString = [dateFormatter stringFromDate:date];
答案 1 :(得分:4)
对于像我这样的新人,我在日期格式化程序上遇到困难,发现[NSCalendar currentCalendar]将使用用户首选项来设置时区。在我的情况下,我想转换一个服务器给我的时间,所以它总是错误的。在我的例子中,我使用了这个简单的函数。
- (NSString *)formatTime:(NSString *)time
{
NSString *hour = [time substringWithRange:NSMakeRange(0, 2)];
NSString *minute = [time substringWithRange:NSMakeRange(2, 2)];
NSString *tail = ([hour integerValue] > 11) ? @"PM" : @"AM";
return [NSString stringWithFormat:@"%@:%@ %@", hour, minute, tail];
}
答案 2 :(得分:1)
你可以试试这个。它对我有用
NSDateFormatter* df = [[NSDateFormatter alloc] init];
[df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
[df setTimeZone:[NSTimeZone systemTimeZone]];
[df setDateFormat:@"yyyy-mm-dd hh:mm:ss"];
NSDate* newDate = [df dateFromString:[df stringFromDate:[NSDate date]]];
[df setDateFormat:@"hh:mm a"];
newDate = [df stringFromDate:[NSDate date]];
答案 3 :(得分:0)
检查你的分钟是否小于720(12小时),如果是,那么它的AM,如果不是它的PM(所以你需要花费数小时-12从军队到12h)然后根据需要添加后缀。它不漂亮,但它是一个相对简单的格式化工作。