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 解析该数据以执行操作

文本格式问题objective-c

iPhone:如何从Objective-C中的货币符号字符串中获取数字

如何使用objective-c从CloudKit中的资产字段中检索图像

如何从Objective-C中的字符串数组创建内部链接?

如何从Objective-C中的异步内部函数内部返回外部函数