性能
NSDateFormatter
的使用比較耗時(ms
級毙驯,但相對來說比較多)
[[NSDateFormatter alloc] init]
的初始化沒什么茂契,設置格式setDateFormat
也沒什么影響。主要是stringFromDate: 或 dateFromString:
這兩個方法,首次調(diào)用時才會耗時惭等。
因此,考慮優(yōu)化办铡,創(chuàng)建一個單例來使用
NSDateFormatter
辞做。
字符串 < - > 時間
// 需要設置時間格式,yyyy-MM-dd HH:mm:ss
NSDate *date2= [dateFormatter dateFromString:nowTimeStr];
NSString *str = [dateFormatter stringFromDate:date];
比較時間先后
if (date1 == [date1 earlierDate:date2])
獲取當前月 的天數(shù)
- (NSInteger)numberOfDaysInCurrentMonth {
// 初始化日歷
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
// 獲取系統(tǒng)當前日期
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]; // 設置系統(tǒng)時區(qū)為本地時區(qū)
NSInteger interval = [zone secondsFromGMT]; // 計算本地時區(qū)與 GMT 時區(qū)的時間差
// 在 GMT 時間基礎上追加時間差值童叠,得到本地時間
date = [date dateByAddingTimeInterval:interval]; //當前的 時分秒
NSString *nowttime = [self.formatter stringFromDate:date]; //當前的 時分秒str
return nowttime;
}
-(NSDateFormatter *)formatter{
if(!_formatter){
//格式
_formatter = [[NSDateFormatter alloc] init];
// 設置時區(qū) 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]; // 設置系統(tǒng)時區(qū)為本地時區(qū)
NSInteger interval = [zone secondsFromGMT]; // 計算本地時區(qū)與 GMT 時區(qū)的時間差
// 在 GMT 時間基礎上追加時間差值框喳,得到本地時間
date = [date dateByAddingTimeInterval:interval]; //當前的時間
NSString *nowttime = [self.dateformatter stringFromDate:date]; //當前的 年月日時分秒str
return nowttime;
}
-(NSDateFormatter *)dateformatter{
if(!_dateformatter){
//格式
_dateformatter = [[NSDateFormatter alloc] init];
// 設置時區(qū) 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得到結(jié)果為相差的分鐘數(shù)
NSInteger hoursBetweenDates = distanceBetweenDates / secondsInAnHour;
獲取時間戳
UInt64 recordTime = [[NSDate date] timeIntervalSince1970]; //*1000;
NSString *time = [NSString stringWithFormat:@"%llu",recordTime];
時間戳 轉(zhuǎn)時間
NSTimeInterval recordTime = [[NSDate date] timeIntervalSince1970];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:recordTime];
NSString *dateString = [self.timeFormatter stringFromDate: date];
模型數(shù)組 根據(jù)時間字段 排序
-(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.reibang.com/p/9e620cb93f86