Objective-C 如何格式化字符串从 09:00 到 9 和 09:00 到 9:30 的所有时间?
Posted
技术标签:
【中文标题】Objective-C 如何格式化字符串从 09:00 到 9 和 09:00 到 9:30 的所有时间?【英文标题】:Objective-C How to format string from 09:00 to 9 and 09:00 to 9:30 for all hours? 【发布时间】:2021-02-17 01:02:44 【问题描述】:我的字典“hoursOfOperation”中有一个来自服务的字符串,该服务具有以下格式的 NSString:“09:00 AM - 05:30 PM”,并且每个对象的时间变化(可以是上午 8 点到下午 4 点等)
如何重新格式化它,使其变为“上午 9 点到下午 5 点 30 分”在 Objective-C 中?
我可以通过使用 stringByReplacingOccurencesOfString 来更改上午/下午,但我不确定如何重新格式化时间。现在看起来像“09:00 a.m. - 05:30 p.m.”
【问题讨论】:
【参考方案1】:简而言之,要格式化日期/时间,您需要一个 NSDateFormatter。 在您的情况下,有几个步骤:
-
将“09:00 AM - 05:30 PM”分成 2 个不同的 NSString 变量
对于每个 NSString 变量,您需要将其转换为 NSDate 并使用 NSDateFormatter 设置日期格式,然后将其转换回您想要的日期字符串
将刚刚格式化的那两个 NSString 添加到一个数组中
将这些对象组合成一个最终时间字符串。
代码示例:
NSString *yourString = @"09:00 AM - 05:30 PM";
NSArray *timeComponents = [yourString componentsSeparatedByString:@" - "];
NSMutableArray *formattedTimeComponents = [NSMutableArray array];
for (NSString *timeComponent in timeComponents)
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"hh:mm a"];
NSDate *time = [dateFormatter dateFromString:timeComponent];
[dateFormatter setDateFormat:@"h:mm a"];
dateFormatter.AMSymbol = @"a.m.";
dateFormatter.PMSymbol = @"p.m.";
NSString *formattedTime = [dateFormatter stringFromDate:time];
[formattedTimeComponents addObject:formattedTime];
NSString *formattedHoursOfOperationString = [formattedTimeComponents componentsJoinedByString:@"-"];
【讨论】:
【参考方案2】:您应该使用NSDateIntervalFormatter
来生成正确本地化并正确处理时区的结果。
您真的、真的、真的不应该自己手动弄乱 AM/PM 格式,因为这样无法正确本地化。
为此,您需要根据原始字符串计算正确的开始和结束日期。
NSDateFormatter *parseFormatter = [[NSDateFormatter alloc] init];
// You should probably set the timeZone for the formatter
parseFormatter.dateStyle = NSDateFormatterNoStyle;
parseFormatter.timeStyle = NSDateFormatterShortStyle; // This might not be the correct style. You should test this with your actual data.
NSArray *times = [originalTimes componentsSeparatedByString:@" - "];
NSDate *startDate = [parseFormatter dateFromString:times[0]];
NSDate *endDate = [parseFormatter dateFromString:times[1]];
接下来,创建一个日期间隔格式化程序,它将为您正确本地化范围。
NSDateIntervalFormatter *intervalFormatter = [[NSDateIntervalFormatter alloc] init];
formatter.dateStyle = NSDateIntervalFormatterNoStyle;
formatter.timeStyle = NSDateIntervalFormatterShortStyle;
// You may also want to set timeZone for time zone you want to be shown in
NSString *result = [formatter stringFromDate:startDate toDate:endDate];
【讨论】:
以上是关于Objective-C 如何格式化字符串从 09:00 到 9 和 09:00 到 9:30 的所有时间?的主要内容,如果未能解决你的问题,请参考以下文章
如何从网站以 xml 格式获取数据并使用 Objective-c 解析该数据以执行操作
iPhone:如何从Objective-C中的货币符号字符串中获取数字