【问题标题】:Objective-C How to format string from 09:00 to 9 and 09:00 to 9:30 for all hours?Objective-C 如何格式化字符串从 09:00 到 9 和 09:00 到 9:30 的所有时间?
【发布时间】: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.”

【问题讨论】:

    标签: ios objective-c xcode formatting


    【解决方案1】:

    简而言之,要格式化日期/时间,您需要一个 NSDateFormatter。 在您的情况下,有几个步骤:

    1. 将“09:00 AM - 05:30 PM”分成 2 个不同的 NSString 变量
    2. 对于每个 NSString 变量,您需要将其转换为 NSDate 并使用 NSDateFormatter 设置日期格式,然后将其转换回您想要的日期字符串
    3. 将刚刚格式化的那两个 NSString 添加到一个数组中
    4. 将这些对象组合成一个最终时间字符串。

    代码示例:

    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];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-05
        • 2017-01-27
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        • 2018-02-17
        • 2022-12-22
        • 1970-01-01
        相关资源
        最近更新 更多