【精】iOS 日期操作总结:NSDate、NSDateFormatter

1、日期(NSDate)

/
//
//(1)NSDate 初始化
//
/

// 初始化一个当前时刻对象
NSDate *now = [[NSDate alloc] init];

// 初始化一个明天当前时刻对象
NSDate *tomorrow = [[NSDate alloc] initWithTimeIntervalSinceNow:24*60*60];

// 初始化一个昨天当前时刻对象
NSDate *yesterday = [[NSDate alloc] initWithTimeInterval:-24*60*60 sinceDate:now];

// 初始化一个 2001-01-01 08:00:00 1小时后的时刻对象
NSDate *oneHourAfterReferenceDate = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:60*60];

// 初始化一个 1970-01-01 08:00:00 1小时后的时刻对象
NSDate *oneHourAfter1970 = [[NSDate alloc] initWithTimeIntervalSince1970:60*60];

/
//
//(2)获取日期描述
//
/

NSString *dateDescription = now.description;

/
//
//(3)获取时间间隔
//
/

// 获取今天到明天的时间间隔
NSTimeInterval interval1 = [tomorrow timeIntervalSinceDate:now];

// 获取今天到明天的时间间隔
NSTimeInterval interval2 = [tomorrow timeIntervalSinceNow];

// 获取 2001-01-01 08:00:00 到今天的时间间隔
NSTimeInterval interval3 = [now timeIntervalSinceReferenceDate];

// 获取 1970-01-01 08:00:00 到今天的时间间隔
NSTimeInterval interval4 = [now timeIntervalSince1970];

/
//
//(4)随机返回一个不可能达到的未来时间、过去时间
//
/

NSDate *futureDate = [NSDate distantFuture];
NSDate *pastDate = [NSDate distantPast];

/
//
//(5)时间相加
//
/

// 返回一个后天当前时刻对象(在明天基础上再加上一天的时间)
NSDate *theDayAfterTomorrow = [tomorrow dateByAddingTimeInterval:24*60*60];

/
//
//(6)时间比较
//
/

// 比较两个时间对象是否相同返回布尔值(由于精度问题,isTheSameDate 为 false)
BOOL isTheSameDate = [theDayAfterTomorrow isEqualToDate:[[NSDate alloc] initWithTimeInterval:2*24*60*60 sinceDate:now]];

// 返回两个时间中较早的一个时间
NSDate *earlierOne = [now earlierDate:tomorrow];

// 返回两个时间中较晚的一个时间
NSDate *laterOne = [now laterDate:tomorrow];

// 比较两个时间对象是否相同并返回 NSComparisonResult 值
NSComparisonResult *comparisonResult = [now compare:tomorrow];

2、日期转换(NSDateFormatter)

/
//
//(1)方式1:用已有日期格式进行转换
//
/

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateStyle = NSDateFormatterMediumStyle;
dateFormatter.timeStyle = NSDateFormatterMediumStyle;

NSDate *now = [[NSDate alloc] init];
// Date 转 String
NSString *nowString = [dateFormatter stringFromDate:now];
// String 转 Date
now = [dateFormatter dateFromString:nowString];

/
//
//(2)方式2:自定义日期格式进行转换
//
/

dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

// Date 转 String
nowString = [dateFormatter stringFromDate:now];
// String 转 Date
now = [dateFormatter dateFromString:nowString];

3、工具类

/**
 *  将 NSDate 转换成 NSString 格式
 *
 *  @param date
 *  @param format 日期格式化样式字符串,如:2015-10-10 16:00:00
 *
 *  @return
 */
- (NSString *)stringFromDate:(NSDate *)date format:(NSString *)format
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = format;
    return [dateFormatter stringFromDate:date];
}

/**
 *  将 NSString 转换成 NSDate 格式
 *
 *  @param dateString
 *  @param format     日期格式化样式字符串,如:2015-10-10 16:00:00
 *
 *  @return
 */
- (NSDate *)dateFromString:(NSString *)dateString format:(NSString *)format
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = format;
    return [dateFormatter dateFromString:dateString];
}

4、扩展

NSDateFormatter 中提供了修改月份、星期等字符的方法,具体有兴趣的话可以参考官方文档。

5、结语

参考资料如下:

NSDate Class Reference

NSDateFormatter Class Reference

你可能感兴趣的:(【iOS,专题总结】)