在应用程序中,显示消息的时候一般都需要附带一个消息接收的时间,使用 NSDate 和 NSDateFormatter 即可完成格式化输出日期的任务,但是在使用时会比较麻烦,通过 Category 的方式来给 NSDate 类直接添加两个类方法来做这些事情会比较好,在以后需要格式化字符串时不需要每次都去创建一个 NSDateFormatter 对象。
对于解析日期时间也是同理。
@interface NSDate (FormatString)
- (NSString*)stringWithFormat:(NSString*)fmt;
+ (NSDate*)dateFromString:(NSString*)str withFormat:(NSString*)fmt;
@end
@implementation NSDate (FormatString)
- (NSString*)stringWithFormat:(NSString*)fmt {
static NSDateFormatter *fmtter;
if (fmtter == nil) {
fmtter = [[NSDateFormatter alloc] init];
}
if (fmt == nil || [fmt isEqualToString:@""]) {
fmt = @"HH:mm:ss";
}
[fmtter setDateFormat:fmt];
return [fmtter stringFromDate:self];
}
+ (NSDate*)dateFromString:(NSString*)str withFormat:(NSString*)fmt {
static NSDateFormatter *fmtter;
if (fmtter == nil) {
fmtter = [[NSDateFormatter alloc] init];
}
if (fmt == nil || [fmt isEqualToString:@""]) {
fmt = @"HH:mm:ss";
}
[fmtter setDateFormat:fmt];
return [fmtter dateFromString:str];
}
@end
在这里,dataFromString 和 stringWithFormat 如果没有指定格式字符串参数的话,默认会使用 HH:mm:ss 来格式日期,当然,如果实际应用场景不一样,这里也可以修改。
如果需要更强大的功能,也可以去修改两个方法来符合自己的需要。
// 获取当前时间的字符串
NSString *now = [[NSDate date] stringWithFormat:@"HH:mm:ss"];
// 将一个字符串解析成 NSDate 对象
NSStirng *recvTime = @"2010-05-25 16:58:34 +0800";
NSDate *recv = [NSDate dateFromString:recvTime withFormat:@"yyyy-MM-dd HH:mm:ss Z"];
使用 Category 给 NSDate 类添加这两个方法后,再要格式化日期或者解析日期时间字符串,就不需要额外去创建 NSDateFormatter 对象了,可以省不少力气。
参考资料
代码比较复杂,有没有简单的。。。
代码不是很简单的么……