iOS-24小时进制时分秒字符串转为时分字符串

Posted MinggeQingchun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS-24小时进制时分秒字符串转为时分字符串相关的知识,希望对你有一定的参考价值。

最近遇到一个坑,后台返回的时间格式是24小时进制的字符串 @"2021-05-07 16:43:49",但是需求需要格式化一下去掉秒,展示时、分;按照如下代码进行,发现转换出来的字符串是空,其实主要是转化后的日期为nil导致的

//日期转为 时-分
+ (NSString *)dateFormatStringToMinute:(NSString *)dateStr {
    /*----当前时间转为时分----*/
    // 实例化NSDateFormatter
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    // 设置日期格式
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm"];
    // 获取当前日期
    NSDate *currentDate = [NSDate date];
    NSString *currentDateString = [formatter stringFromDate:currentDate];
    NSLog(@"%@", currentDateString);
    
    
    NSDateFormatter *dateFormaterMinute = [[NSDateFormatter alloc] init];
    dateFormaterMinute.timeZone = [NSTimeZone systemTimeZone];
    dateFormaterMinute.locale = [NSLocale autoupdatingCurrentLocale];
    
//    [dateFormaterMinute setTimeZone:[NSTimeZone localTimeZone]];
//    //指定语言
//    [dateFormaterMinute setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
    
    //这里如果不设置为UTC时区,会把要转换的时间字符串定为当前时区的时间(东八区)转换为UTC时区的时间
    [dateFormaterMinute setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
    if ([dateStr rangeOfString:@"00:00:00"].location != NSNotFound) {
        [dateFormaterMinute setDateFormat:@"yyyy-MM-dd"];
    }else {
        [dateFormaterMinute setDateFormat:@"yyyy-MM-dd HH:mm"]; //采用年月日 时分格式
    }
    
    NSDate *formateDate = [dateFormaterMinute dateFromString:dateStr];
    if (!formateDate) { // 区分是不是日期字符串,转化失败,则不是
        return dateStr;
    }
    
    // NSDate ->NSString
    dateFormaterMinute.dateFormat = dateStr;
    // 指定语言
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en"];
    [dateFormaterMinute setLocale:locale];
    NSString *resultStr = [dateFormaterMinute stringFromDate:formateDate];
    return resultStr;
}

输出结果如下:

但是获取当前日期按照上面格式化不会为nil,如下:

按照网上各种设置时区,语言都不顶用,最后博主改变思路,多格式化一次,先将后台返回的时、分、秒字符转化成时、分、秒日期类型,再将时、分、秒日期类型格式化成时、分字符串即可

//日期转为 时-分
+ (NSString *)dateFormatStringToMinute:(NSString *)dateStr {
    if (dateStr == nil || [dateStr isEqual:[NSNull null]] || [dateStr isEqualToString:@""]) {
        return @"";
    }

    NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init];
    if ([dateStr rangeOfString:@"00:00:00"].location != NSNotFound) {
        [dateFormater setDateFormat:@"yyyy-MM-dd"];
    }else {
        [dateFormater setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; //采用年月日 时分格式
    }
    NSDate *date = [dateFormater dateFromString:dateStr];
//    dateStr = [dateFormater stringFromDate:date];
    
    NSDateFormatter *dateFormaterMinute = [[NSDateFormatter alloc] init];
//    dateFormater.timeZone = [NSTimeZone systemTimeZone];
//    dateFormater.locale = [NSLocale autoupdatingCurrentLocale];
    
//    [fmt setTimeZone:[NSTimeZone localTimeZone]];
//    [fmt setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
    // 指定语言
//    [fmt setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
    
    // 这里如果不设置为UTC时区,会把要转换的时间字符串定为当前时区的时间(东八区)转换为UTC时区的时间
//    [dateFormaterMinute setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
    if ([dateStr rangeOfString:@"00:00:00"].location != NSNotFound) {
        [dateFormaterMinute setDateFormat:@"yyyy-MM-dd"];
    }else {
        [dateFormaterMinute setDateFormat:@"yyyy-MM-dd HH:mm"]; //采用年月日 时分格式
    }
    
//    NSDate *formateDate = [dateFormaterMinute dateFromString:dateStr];
//    if (!formateDate) { // 区分是不是日期字符串,转化失败,则不是
//        return dateStr;
//    }
    
//    // NSDate ->NSString
//    dateFormaterMinute.dateFormat = dateStr;
    // 指定语言
//    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en"];
//    [fmt setLocale:locale];
    NSString *resultStr = [dateFormaterMinute stringFromDate:date];
    return resultStr;
}

这时再看结果resultStr就是格式化之后的时、分字符串:@"2021-05-07 16:43"

以上是关于iOS-24小时进制时分秒字符串转为时分字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何把年月日时分秒的字符串转换成日期类型

python计算时分秒 青少年编程电子学会python编程等级考试一级真题解析2020-12

java 给固定日期(字符串)加上时分秒

时分秒 分别用啥字母表示

有啥好方法把秒数转换成时分秒的格式

js获取当前当前年月日时分秒,以及获取年月日(无时分秒),详情见补充!