iOS开发之对日期格式处理的总结

本文总结了iOS开发中日期格式化的常见需求,通过创建NSDate分类,介绍了一系列时间转换和处理的方法,帮助开发者快速处理日期格式问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      在开发中经常用遇到一些对日期进行各种格式处理的需求, 为了方便更快的开发,本人对各种时间格式的转换和处理做了个总结.

       废话不多说直接上干货:

       首先创建一个NSDate的分类, 在里面增加我们要做的一些格式处理的方法. 如下:

#import <Foundation/Foundation.h>

@interface NSDate (Extensions)
- (NSString *)stringFromDate;
- (NSDate *)dateByAddingMonth:(NSInteger)month;

/**
 *  @Author GorLong
 *
 *  获取当前日期 yyyyMMdd
 *
 */
+ (NSString *)nowDate;

/**
 *  @Author GorLong
 *
 *  获取上个月日期 yyyyMMdd
 *
 */
+ (NSString *)previousMonthDate;

/**
 *  @Author GorLong
 *
 *  时间格式转换 yyyyMMdd -> yyyy年MM月dd日
 *
 *  @param tempTimeStr 转换前的时间
 *
 *  @return 转换后的时间
 */
+ (NSString *)changeTimeFormat:(NSString *)tempTimeStr;

/**
 *  @Author GorLong
 *
 *  时间格式转换  yyyyMMdd -> yyyy-MM-dd
 *
 *  @param tempTimeStr 转换前的时间
 *
 *  @return 转换后的时间
 */
+ (NSString *)changeTimeFormatTwo:(NSString *)tempTimeStr;

/**
 *  @Author GorLong
 *
 *  日期格式转换, MM-dd -> MM月dd日
 *
 *  @param tempTimeStr 转换前的时间
 *
 *  @return 转换后的时间
 */
+ (NSString *)changeTimeFormatThree:(NSString *)tempTimeStr;

/**
 *  @Author GorLong
 *
 *  时间格式转换 yyyy年MM月dd日 -> MM-dd
 *
 *  @param tempTimeStr 转换前的时间
 *
 *  @return 转换后的时间
 */
+ (NSString *)changeTimeFormatFour:(NSString *)tempTimeStr;

/**
 *  @Author GorLong
 *
 *  时间格式转换 HHmmss -> HH:mm
 *
 *  @param tempTimeStr 转换前的时间
 *
 *  @return 转换后的时间
 */
+ (NSString *)changeTimeFormatFive:(NSString *)tempTimeStr;

/**
 *  @Author GorLong
 *
 *  时间格式转换 yyyyMMdd -> MM-dd
 *
 *  @param tempTimeStr 转换前的时间
 *
 *  @return 转换后的时间
 */
+ (NSString *)changeTimeFormatSix:(NSString *)tempTimeStr;

/**
 *  @Author GorLong
 *
 *  时间格式转换  yyyyMMdd -> yy-MM-dd
 *
 *  @param tempTimeStr 转换前的时间
 *
 *  @return 转换后的时间
 */
+ (NSString *)changeTimeFormatSeven:(NSString *)tempTimeStr;

/**
 *  @author GorLong
 *
 *  date转换为string
 *
 *  @param date   date
 *  @param format 转换后的格式[yyyy-MM-dd-HH:mm:ss.SSS]
 *
 *  @return 返回转换后的格式
 */
+ (NSString *)stringFromDate:(NSDate *)date format:(NSString *)format;

/**
 *  @author GorLong
 *
 *  string转换date
 *
 *  @param string string类型的date
 *  @param format 字串类型日期格式[yyyy-MM-dd-HH:mm:ss.SSS]
 *
 *  @return 返回日期
 */
+ (NSDate *)dateFormString:(NSString *)string format:(NSString *)format;

/**
 *  @author GorLong, 15-01-29 11:01:36
 *
 *  转换字串型日期格式
 *
 *  @param stringDate 字串型日期
 *  @
oldFormat  旧日期格式
 *  @param newFormat  新日期格式
 *
 *  @return 转换后的日期格式
 */
+ (NSString *)stringFromStringDate:(NSString *)stringDate oldFormat:(NSString *)oldFormat newFormat:(NSString *)newFormat;

/**
 *  @author GorLong, 16-08-16 13:08:27
 *
 *  获取当前时间戳
 *
 *  @return 时间戳
 */
+ (NSString *)nowTimestamp;
@end



 然后是.m文件中方法的实现:


#import "NSDate+Extensions.h"

@implementation NSDate (Extensions)

- (NSDate *)dateByAddingMonth:(NSInteger)month {
    NSCalendar *gregorian   = [NSCalendar currentCalendar];
    
    NSDateComponents *comps = [gregorian components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit |
                               NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit
                                           fromDate:self];
    int y = (int)[comps year];
    int m = (int)[comps month];
    int d = (int)[comps day];
    
    int p = month % 12;
    y += month / 12;
    m += p;
    
    int daysModifier[] = {1,-2,1,0,1,0,1,1,0,1,0,1};
    
    if (m < 1) {--y; m += 12;}
    else if (m > 12) {++y;m -= 12;}
    
    int q = daysModifier[m - 1] + 30;
    if (m == 2) q += !((y % 4 != 0) || (y % 100 == 0 && y % 400 != 0));
    
    if (d > q) d = q;
    
    [comps setYear:y];
    [comps setMonth:m];
    [comps setDay:d];
    
    NSDate *date = [gregorian dateFromComponents:comps];
    return date;
}

- (NSString *)stringFromDate {
    unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *comps = [calendar components:unitFlags fromDate:self];
    NSString *string = [NSString stringWithFormat:@"%d%02d%02d", (int)[comps year], (int)[comps month], (int)[comps day]];
    return  string;
}

/**
 *  @Author   GorLong
 *
 *  获取当前日期 yyyyMMdd
 *
 */
+ (NSString *)nowDate {
    NSDateFormatter *formater = [[NSDateFormatter alloc] init];
    NSDate *curDate = [NSDate date];//获取当前日期
    [formater setDateFormat:@"yyyyMMdd"];//这里去掉 具体时间 保留日期
    NSString *curTime = [formater stringFromDate:curDate];
    
    return curTime;
}

/**
 *  @Author  GorLong
 *
 *  获取上个月日期 yyyyMMdd
 *
 */
+ (NSString *)previousMonthDate {
    NSDate *previousMonth = [[NSDate date] dateByAddingMonth:-1];
    NSDateFormatter *formater = [[NSDateFormatter alloc] init];
    NSDate *curDate = previousMonth;
    [formater setDateFormat:@"yyyyMMdd"];
    NSString *curTime = [formater stringFromDate:curDate];
    return curTime;
}

/**
 *  @Author  GorLong
 *
 *  时间格式转换 yyyyMMdd -> yyyy年MM月dd日
 *
 *  @param tempTimeStr 转换前的时间
 *
 *  @return 转换后的时间
 */
+ (NSString *)changeTimeFormat:(NSString *)tempTimeStr {
    if (tempTimeStr.length < 8) {
        return nil;
    }
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyyMMdd";
    NSDate *date = [formatter dateFromString:tempTimeStr];
    formatter.dateFormat = @"yyyy年MM月dd日";
    NSString *dateStr = [formatter stringFromDate:date];
    
    return dateStr;
}

/**
 *  @Author GorLong
 *
 *  时间格式转换  yyyyMMdd -> yyyy-MM-dd
 *
 *  @param tempTimeStr 转换前的时间
 *
 *  @return 转换后的时间
 */
+ (NSString *)changeTimeFormatTwo:(NSString *)tempTimeStr {
    if (tempTimeStr.length <= 0) {
        return nil;
    }
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyyMMdd";
    NSDate *date = [formatter dateFromString:tempTimeStr];
    formatter.dateFormat = @"yyyy-MM-dd";
    NSString *dateStr = [formatter stringFromDate:date];
    
    return dateStr;
}

/**
 *  @Author GorLong
 *
 *  日期格式转换, MM-dd -> MM月dd日
 *
 *  @param tempTimeStr 转换前的时间
 *
 *  @return 转换后的时间
 */
+ (NSString *)changeTimeFormatThree:(NSString *)tempTimeStr {
    if (tempTimeStr.length <= 0) {
        return nil;
    }
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"MMdd";
    NSDate *date = [formatter dateFromString:tempTimeStr];
    formatter.dateFormat = @"MM月dd日";
    NSString *dateStr = [formatter stringFromDate:date];
    
    return dateStr;
}

/**
 *  @Author GorLong
 *
 *  时间格式转换 yyyy年MM月dd日 -> MM-dd
 *
 *  @param tempTimeStr 转换前的时间
 *
 *  @return 转换后的时间
 */
+ (NSString *)changeTimeFormatFour:(NSString *)tempTimeStr {
    if (tempTimeStr.length <= 0) {
        return @"";
    }
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyy年MM月dd日";
    NSDate *date = [formatter dateFromString:tempTimeStr];
    formatter.dateFormat = @"MM-dd";
    NSString *dateStr = [formatter stringFromDate:date];
    
    return dateStr;
}

/**
 *  @Author GorLong
 *
 *  时间格式转换 HHmmss -> HH:mm
 *
 *  @param tempTimeStr 转换前的时间
 *
 *  @return 转换后的时间
 */
+ (NSString *)changeTimeFormatFive:(NSString *)tempTimeStr {
    if (tempTimeStr.length <= 0) {
        return @"";
    }
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"HHmmss";
    NSDate *date = [formatter dateFromString:tempTimeStr];
    formatter.dateFormat = @"HH:mm";
    NSString *dateStr = [formatter stringFromDate:date];
    
    return dateStr;
}

/**
 *  @Author GorLong
 *
 *  时间格式转换 yyyyMMdd -> MM-dd
 *
 *  @param tempTimeStr 转换前的时间
 *
 *  @return 转换后的时间
 */
+ (NSString *)changeTimeFormatSix:(NSString *)tempTimeStr {
    if (tempTimeStr.length <= 0) {
        return @"";
    }
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyyMMdd";
    NSDate *date = [formatter dateFromString:tempTimeStr];
    formatter.dateFormat = @"MM-dd";
    NSString *dateStr = [formatter stringFromDate:date];
    
    return dateStr;
}

/**
 *  @Author GorLong
 *
 *  时间格式转换  yyyyMMdd -> yy-MM-dd
 *
 *  @param tempTimeStr 转换前的时间
 *
 *  @return 转换后的时间
 */
+ (NSString *)changeTimeFormatSeven:(NSString *)tempTimeStr {
    if (tempTimeStr.length <= 0) {
        return nil;
    }
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyyMMdd";
    NSDate *date = [formatter dateFromString:tempTimeStr];
    formatter.dateFormat = @"yy-MM-dd";
    NSString *dateStr = [formatter stringFromDate:date];
    return dateStr;
}

/**
 *  @author GorLong
 *
 *  date转换为string
 *
 *  @param date   date
 *  @param format 转换后的格式[yyyy-MM-dd-HH:mm:ss.SSS]
 *
 *  @return 返回转换后的格式
 */
+ (NSString *)stringFromDate:(NSDate *)date format:(NSString *)format
{
    if(!date) {
        return nil;
    }
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = format;
    return [formatter stringFromDate:date];
}


/**
 *  @author GorLong
 *
 *  string转换date
 *
 *  @param string string类型的date
 *  @param format 字串类型日期格式[yyyy-MM-dd-HH:mm:ss.SSS]
 *
 *  @return 返回日期
 */
+ (NSDate *)dateFormString:(NSString *)string format:(NSString *)format
{
    if(!string) {
        return nil;
    }
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = format;
    return [formatter dateFromString:string];
}


/**
 *  @author GorLong, 15-01-29 11:01:36
 *
 *  转换字串型日期格式
 *
 *  @param stringDate 字串型日期
 *  @param oldFormat  旧日期格式
 *  @param newFormat  新日期格式
 *
 *  @return 转换后的日期格式
 */
+ (NSString *)stringFromStringDate:(NSString *)stringDate
                         oldFormat:(NSString *)oldFormat
                         newFormat:(NSString *)newFormat
{
    NSDate *date = [self dateFormString:stringDate format:oldFormat];
    NSString *strDate = [self stringFromDate:date format:newFormat];
    return strDate;
}



/**
 *  @author GorLong, 16-08-16 13:08:27
 *
 *  获取当前时间戳
 *
 *  @return 时间戳
 */
+ (NSString *)nowTimestamp{
    
    NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];
    NSTimeInterval a=[dat timeIntervalSince1970] * 1000;
    NSString *timestamp = [NSString stringWithFormat:@"%.0f", a];
    return timestamp;
}


@end





       这样放到工程里面,有对日期进行处理的时候直接调用是不是很方便! 另外欢迎各位进行补充和优化!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值