性能
NSDateFormatter
的使用比较耗时(ms
级,但相对来说比较多)
[[NSDateFormatter alloc] init]
的初始化没什么,设置格式setDateFormat
也没什么影响。主要是stringFromDate: 或 dateFromString:
这两个方法,首次调用时才会耗时。
因此,考虑优化,创建一个单例来使用
NSDateFormatter
。
字符串 < - > 时间
// 需要设置时间格式,yyyy-MM-dd HH:mm:ss
NSDate *date2= [dateFormatter dateFromString:nowTimeStr];
NSString *str = [dateFormatter stringFromDate:date];
比较时间先后
if (date1 == [date1 earlierDate:date2])
获取当前月 的天数
- (NSInteger)numberOfDaysInCurrentMonth {
// 初始化日历
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
// 获取系统当前日期
NSDate *currentDate = [NSDate date];
// 获取当前日期中当前月中天的范围
NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:currentDate];
// 得到当前月中总共有多少天(即范围的长度)
NSInteger numberOfDaysInCurrentMonth = range.length;
return numberOfDaysInCurrentMonth;
}
获取当前的 年月日,当天是周几
-(long)getCurrentYearMonthDataWeekday:(NSString *)param{
NSCalendar *greCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [greCalendar components:NSCalendarUnitYear | NSCalendarUnitMonth |
NSCalendarUnitDay | NSCalendarUnitHour |
NSCalendarUnitMinute | NSCalendarUnitSecond |
(1UL << 8) | NSCalendarUnitWeekday | NSCalendarUnitWeekOfMonth |
NSCalendarUnitWeekOfYear fromDate:[NSDate date]];
if([param isEqualToString:@"年"])
return (long)dateComponents.year;
else if([param isEqualToString:@"月"])
return (long)dateComponents.month;
else if([param isEqualToString:@"日"])
return (long)dateComponents.day;
else if([param isEqualToString:@"周几"])
return (long)dateComponents.weekday;
else
return 0;
/*
NSLog(@"weekday(星期):%li", (long)dateComponents.weekday); //星期日 对应的值为1,星期一 对应的值为2 依次递推
NSLog(@"weekOfMonth(该月第几周):%li", dateComponents.weekOfMonth);
*/
}
获取当前时间(时分秒)
//1、得到当前的 时分秒str
- (NSString *)getCurrentTime{
//2.当前时间段
NSDate *date = [NSDate date];
NSTimeZone *zone = [NSTimeZone systemTimeZone]; // 设置系统时区为本地时区
NSInteger interval = [zone secondsFromGMT]; // 计算本地时区与 GMT 时区的时间差
// 在 GMT 时间基础上追加时间差值,得到本地时间
date = [date dateByAddingTimeInterval:interval]; //当前的 时分秒
NSString *nowttime = [self.formatter stringFromDate:date]; //当前的 时分秒str
return nowttime;
}
-(NSDateFormatter *)formatter{
if(!_formatter){
//格式
_formatter = [[NSDateFormatter alloc] init];
// 设置时区 GMT
[_formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[_formatter setDateFormat:@"HH:mm:ss"]; //时间格式为 时分秒
}
return _formatter;
}
时差问题
NSDate默认是UTC时间
NSDate *date = [NSDate date];
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate: date];
// 本地时间
NSDate *localeDate = [date dateByAddingTimeInterval: interval];
得到当前时间( 年月日 时分秒)
//得到当前的 年月日 时分秒str
- (NSString *)getCurrentDateTime{
NSDate *date = [NSDate date];
NSTimeZone *zone = [NSTimeZone systemTimeZone]; // 设置系统时区为本地时区
NSInteger interval = [zone secondsFromGMT]; // 计算本地时区与 GMT 时区的时间差
// 在 GMT 时间基础上追加时间差值,得到本地时间
date = [date dateByAddingTimeInterval:interval]; //当前的时间
NSString *nowttime = [self.dateformatter stringFromDate:date]; //当前的 年月日时分秒str
return nowttime;
}
-(NSDateFormatter *)dateformatter{
if(!_dateformatter){
//格式
_dateformatter = [[NSDateFormatter alloc] init];
// 设置时区 GMT
[_dateformatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[_dateformatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"]; //时间格式 年月日 时分秒
}
return _dateformatter;
}
比较两个时间之差
NSDate* date1 = someDate;
NSDate* date2 = someOtherDate;
NSTimeInterval distanceBetweenDates = [date1 timeIntervalSinceDate:date2];
double secondsInAnHour = 3600;
// 除以3600是把秒化成小时,除以60得到结果为相差的分钟数
NSInteger hoursBetweenDates = distanceBetweenDates / secondsInAnHour;
获取时间戳
UInt64 recordTime = [[NSDate date] timeIntervalSince1970]; //*1000;
NSString *time = [NSString stringWithFormat:@"%llu",recordTime];
时间戳 转时间
NSTimeInterval recordTime = [[NSDate date] timeIntervalSince1970];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:recordTime];
NSString *dateString = [self.timeFormatter stringFromDate: date];
模型数组 根据时间字段 排序
-(void)sortOneYuanShop{
NSArray *sortArray = [self.oneYuanShopArr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
PDshopItem *item1 = obj1;
PDshopItem *item2 = obj2;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
NSDate *date1= [dateFormatter dateFromString:item1.startTime];
NSDate *date2= [dateFormatter dateFromString:item2.startTime];
if (date1 == [date1 earlierDate: date2]) { //不使用intValue比较无效
return NSOrderedDescending;//降序
}else if (date1 == [date1 laterDate: date2]) {
return NSOrderedAscending;//升序
}else{
return NSOrderedSame;//相等
}
//return NSOrderedAscending;//升序
}];
self.oneYuanShopArr = [NSArray arrayWithArray:sortArray];
}
获取前一天
NSTimeInterval todayTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate];
NSTimeInterval lastDayTimeInterval = todayTimeInterval - 24 * 3600; // 后一天 + 24 * 3600;
NSDate *lastDay = [NSDate dateWithTimeIntervalSinceReferenceDate:lastDayTimeInterval];
NSString *dateString = [JHDateConvertion stringWithDate:lastDay format:@"MM-dd EE"];
参考链接
http://blog.csdn.net/daiyelang/article/details/18731543
http://blog.csdn.net/x844010689/article/details/24730553
http://www.jianshu.com/p/9e620cb93f86