iOS NSDate 常用日期相关函数的封装
Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。
NSDate+Category.h 代码:
#import <Foundation/Foundation.h> #define D_MINUTE 60
#define D_HOUR 3600
#define D_DAY 86400
#define D_WEEK 604800
#define D_YEAR 31556926 @interface NSDate (Category) - (NSString *)timeIntervalDescription; //距离当前的时间间隔描述
- (NSString *)minuteDescription; //精确到分钟的日期描述*/
- (NSString *)formattedTime;
- (NSString *)formattedDateDescription; //格式化日期描述
- (double)timeIntervalSince1970InMilliSecond;
+ (NSDate *)dateWithTimeIntervalInMilliSecondSince1970:(double)timeIntervalInMilliSecond;
+ (NSString *)formattedTimeFromTimeInterval:(long long)time; //从当前日期起的相对日期
+ (NSDate *) dateTomorrow;
+ (NSDate *) dateYesterday;
+ (NSDate *) dateWithDaysFromNow: (NSInteger) days;
+ (NSDate *) dateWithDaysBeforeNow: (NSInteger) days;
+ (NSDate *) dateWithHoursFromNow: (NSInteger) dHours;
+ (NSDate *) dateWithHoursBeforeNow: (NSInteger) dHours;
+ (NSDate *) dateWithMinutesFromNow: (NSInteger) dMinutes;
+ (NSDate *) dateWithMinutesBeforeNow: (NSInteger) dMinutes;
+ (NSString *)weekdayStringValue:(NSDate*)date; //日期比较
- (BOOL) isEqualToDateIgnoringTime: (NSDate *) aDate;
- (BOOL) isToday;
- (BOOL) isTomorrow;
- (BOOL) isYesterday;
- (BOOL) isSameWeekAsDate: (NSDate *) aDate;
- (BOOL) isThisWeek;
- (BOOL) isNextWeek;
- (BOOL) isLastWeek;
- (BOOL) isSameMonthAsDate: (NSDate *) aDate;
- (BOOL) isThisMonth;
- (BOOL) isSameYearAsDate: (NSDate *) aDate;
- (BOOL) isThisYear;
- (BOOL) isNextYear;
- (BOOL) isLastYear;
- (BOOL) isEarlierThanDate: (NSDate *) aDate;
- (BOOL) isLaterThanDate: (NSDate *) aDate;
- (BOOL) isInFuture;
- (BOOL) isInPast; //工作日和休息日
- (BOOL) isTypicallyWorkday;
- (BOOL) isTypicallyWeekend; //日期调整
- (NSDate *) dateByAddingDays: (NSInteger) dDays;
- (NSDate *) dateBySubtractingDays: (NSInteger) dDays;
- (NSDate *) dateByAddingHours: (NSInteger) dHours;
- (NSDate *) dateBySubtractingHours: (NSInteger) dHours;
- (NSDate *) dateByAddingMinutes: (NSInteger) dMinutes;
- (NSDate *) dateBySubtractingMinutes: (NSInteger) dMinutes;
- (NSDate *) dateAtStartOfDay; //检索的时间间隔
- (NSInteger) minutesAfterDate: (NSDate *) aDate;
- (NSInteger) minutesBeforeDate: (NSDate *) aDate;
- (NSInteger) hoursAfterDate: (NSDate *) aDate;
- (NSInteger) hoursBeforeDate: (NSDate *) aDate;
- (NSInteger) daysAfterDate: (NSDate *) aDate;
- (NSInteger) daysBeforeDate: (NSDate *) aDate;
- (NSInteger)distanceInDaysToDate:(NSDate *)anotherDate; //分解的日期
@property (readonly) NSInteger nearestHour;
@property (readonly) NSInteger hour;
@property (readonly) NSInteger minute;
@property (readonly) NSInteger seconds;
@property (readonly) NSInteger day;
@property (readonly) NSInteger month;
@property (readonly) NSInteger week;
@property (readonly) NSInteger weekday;
@property (readonly) NSInteger nthWeekday; // e.g. 2nd Tuesday of the month == 2
@property (readonly) NSInteger year; #pragma mark 日期格式化
+ (id)dateFormatter; + (id)dateFormatterWithFormat:(NSString *)dateFormat; + (id)defaultDateFormatter;/*yyyy-MM-dd HH:mm:ss*/ @end
NSDate+Category.m 代码:
#import "NSDate+Category.h" #define DATE_COMPONENTS (NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekOfYear | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitWeekday | NSCalendarUnitWeekdayOrdinal)
#define CURRENT_CALENDAR [NSCalendar currentCalendar] @implementation NSDate (Category) /**
* @brief 距离当前的时间间隔描述
*
* @param paramete 请求参数
*
* @return NSString格式的请求参数
*/
- (NSString *)timeIntervalDescription
{
NSTimeInterval timeInterval = -[self timeIntervalSinceNow];
if (timeInterval < ) {
return @"1分钟内";
} else if (timeInterval < ) {
return [NSString stringWithFormat:@"%ld分钟前", (long)timeInterval/];
} else if (timeInterval < ) {
return [NSString stringWithFormat:@"%ld小时前", (long)timeInterval / ];
} else if (timeInterval < ) {//30天内
return [NSString stringWithFormat:@"%ld天前", (long)timeInterval / ];
} else if (timeInterval < ) {//30天至1年内
NSDateFormatter *dateFormatter = [NSDate dateFormatterWithFormat:@"M月d日"];
return [dateFormatter stringFromDate:self];
} else {
return [NSString stringWithFormat:@"%ld年前", (long)timeInterval / ];
}
} /**
* @brief 精确到分钟的日期描述
*
* @param paramete 请求参数
*
* @return NSString格式的请求参数
*/
- (NSString *)minuteDescription
{
NSDateFormatter *dateFormatter = [NSDate dateFormatterWithFormat:@"yyyy-MM-dd"]; NSString *theDay = [dateFormatter stringFromDate:self];//日期的年月日
NSString *currentDay = [dateFormatter stringFromDate:[NSDate date]];//当前年月日
if ([theDay isEqualToString:currentDay]) {//当天
[dateFormatter setDateFormat:@"ah:mm"];
return [dateFormatter stringFromDate:self];
} else if ([[dateFormatter dateFromString:currentDay] timeIntervalSinceDate:[dateFormatter dateFromString:theDay]] == ) {//昨天
[dateFormatter setDateFormat:@"ah:mm"];
return [NSString stringWithFormat:@"昨天 %@", [dateFormatter stringFromDate:self]];
} else if ([[dateFormatter dateFromString:currentDay] timeIntervalSinceDate:[dateFormatter dateFromString:theDay]] < * ) {//间隔一周内
[dateFormatter setDateFormat:@"EEEE ah:mm"];
return [dateFormatter stringFromDate:self];
} else {//以前
[dateFormatter setDateFormat:@"yyyy-MM-dd ah:mm"];
return [dateFormatter stringFromDate:self];
}
} /**
* @brief 标准时间日期描述
*
* @param paramete 请求参数
*
* @return NSString格式的请求参数
*/
-(NSString *)formattedTime{
NSDateFormatter* formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"YYYY-MM-dd"];
NSString * dateNow = [formatter stringFromDate:[NSDate date]];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:[[dateNow substringWithRange:NSMakeRange(,)] intValue]];
[components setMonth:[[dateNow substringWithRange:NSMakeRange(,)] intValue]];
[components setYear:[[dateNow substringWithRange:NSMakeRange(,)] intValue]];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *date = [gregorian dateFromComponents:components]; //今天 0点时间 NSInteger hour = [self hoursAfterDate:date];
NSDateFormatter *dateFormatter = nil;
NSString *ret = @""; //hasAMPM==TURE为12小时制,否则为24小时制
NSString *formatStringForHours = [NSDateFormatter dateFormatFromTemplate:@"j" options: locale:[NSLocale currentLocale]];
NSRange containsA = [formatStringForHours rangeOfString:@"a"];
BOOL hasAMPM = containsA.location != NSNotFound; if (!hasAMPM) { //24小时制
if (hour <= && hour >= ) {
dateFormatter = [NSDate dateFormatterWithFormat:@"HH:mm"];
}else if (hour < && hour >= -) {
dateFormatter = [NSDate dateFormatterWithFormat:@"昨天HH:mm"];
}else {
dateFormatter = [NSDate dateFormatterWithFormat:@"yyyy-MM-dd HH:mm"];
}
}else {
if (hour >= && hour <= ) {
dateFormatter = [NSDate dateFormatterWithFormat:@"凌晨hh:mm"];
}else if (hour > && hour <= ) {
dateFormatter = [NSDate dateFormatterWithFormat:@"上午hh:mm"];
}else if (hour > && hour <= ) {
dateFormatter = [NSDate dateFormatterWithFormat:@"下午hh:mm"];
}else if (hour > && hour <= ) {
dateFormatter = [NSDate dateFormatterWithFormat:@"晚上hh:mm"];
}else if (hour < && hour >= -){
dateFormatter = [NSDate dateFormatterWithFormat:@"昨天HH:mm"];
}else {
dateFormatter = [NSDate dateFormatterWithFormat:@"yyyy-MM-dd HH:mm"];
}
} ret = [dateFormatter stringFromDate:self];
return ret;
} /**
* @brief 格式化日期描述
*
* @param paramete 请求参数
*
* @return NSString格式的请求参数
*/
- (NSString *)formattedDateDescription
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *theDay = [dateFormatter stringFromDate:self];//日期的年月日
NSString *currentDay = [dateFormatter stringFromDate:[NSDate date]];//当前年月日 NSInteger timeInterval = -[self timeIntervalSinceNow]; if (timeInterval < ) {
return @"1分钟内";
} else if (timeInterval < ) {//1小时内
return [NSString stringWithFormat:@"%ld分钟前", (long)timeInterval / ];
} else if (timeInterval < ) {//6小时内
return [NSString stringWithFormat:@"%ld小时前", (long)timeInterval / ];
} else if ([theDay isEqualToString:currentDay]) {//当天
[dateFormatter setDateFormat:@"HH:mm"];
return [NSString stringWithFormat:@"今天 %@", [dateFormatter stringFromDate:self]];
} else if ([[dateFormatter dateFromString:currentDay] timeIntervalSinceDate:[dateFormatter dateFromString:theDay]] == ) {//昨天
[dateFormatter setDateFormat:@"HH:mm"];
return [NSString stringWithFormat:@"昨天 %@", [dateFormatter stringFromDate:self]];
} else {//以前
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
return [dateFormatter stringFromDate:self];
}
} - (double)timeIntervalSince1970InMilliSecond {
double ret;
ret = [self timeIntervalSince1970] * ; return ret;
} + (NSDate *)dateWithTimeIntervalInMilliSecondSince1970:(double)timeIntervalInMilliSecond {
NSDate *ret = nil;
double timeInterval = timeIntervalInMilliSecond;
// 判断参数是否在secconds中(对于以前的数据结构)
if(timeIntervalInMilliSecond > ) {
timeInterval = timeIntervalInMilliSecond / ;
}
ret = [NSDate dateWithTimeIntervalSince1970:timeInterval]; return ret;
} + (NSString *)formattedTimeFromTimeInterval:(long long)time{
return [[NSDate dateWithTimeIntervalInMilliSecondSince1970:time] formattedTime];
} #pragma mark Relative Dates + (NSDate *) dateWithDaysFromNow: (NSInteger) days
{
return [[NSDate date] dateByAddingDays:days];
} + (NSDate *) dateWithDaysBeforeNow: (NSInteger) days
{
// Thanks, Jim Morrison
return [[NSDate date] dateBySubtractingDays:days];
} + (NSDate *) dateTomorrow
{
return [NSDate dateWithDaysFromNow:];
} + (NSDate *) dateYesterday
{
return [NSDate dateWithDaysBeforeNow:];
} + (NSDate *) dateWithHoursFromNow: (NSInteger) dHours
{
NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] + D_HOUR * dHours;
NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
return newDate;
} + (NSDate *) dateWithHoursBeforeNow: (NSInteger) dHours
{
NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] - D_HOUR * dHours;
NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
return newDate;
} + (NSDate *) dateWithMinutesFromNow: (NSInteger) dMinutes
{
NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] + D_MINUTE * dMinutes;
NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
return newDate;
} + (NSDate *) dateWithMinutesBeforeNow: (NSInteger) dMinutes
{
NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] - D_MINUTE * dMinutes;
NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
return newDate;
} + (NSString *)weekdayStringValue:(NSDate*)date
{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger unitFlags = NSWeekCalendarUnit|NSWeekdayCalendarUnit;
NSDateComponents *comps = [calendar components:unitFlags fromDate:date];
NSInteger weekday = [comps weekday];
switch (weekday)
{
case :
return @"星期天";
break;
case :
return @"星期一";
break;
case :
return @"星期二";
break;
case :
return @"星期三";
break;
case :
return @"星期四";
break;
case :
return @"星期五";
break;
case :
return @"星期六";
break; default:
break;
}
return nil;
} #pragma mark Comparing Dates
- (BOOL) isEqualToDateIgnoringTime: (NSDate *) aDate
{
NSDateComponents *components1 = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self];
NSDateComponents *components2 = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:aDate];
return ((components1.year == components2.year) &&
(components1.month == components2.month) &&
(components1.day == components2.day));
} - (BOOL) isToday
{
return [self isEqualToDateIgnoringTime:[NSDate date]];
} - (BOOL) isTomorrow
{
return [self isEqualToDateIgnoringTime:[NSDate dateTomorrow]];
} - (BOOL) isYesterday
{
return [self isEqualToDateIgnoringTime:[NSDate dateYesterday]];
} - (BOOL) isSameWeekAsDate: (NSDate *) aDate
{
NSDateComponents *components1 = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self];
NSDateComponents *components2 = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:aDate]; // 必须在同一周。12/31和1/1如果在同一周,都是周1
if (components1.weekOfYear != components2.weekOfYear) return NO; // 必须有一个时间间隔不到1周
return (fabs([self timeIntervalSinceDate:aDate]) < D_WEEK);
} - (BOOL) isThisWeek
{
return [self isSameWeekAsDate:[NSDate date]];
} - (BOOL) isNextWeek
{
NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] + D_WEEK;
NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
return [self isSameWeekAsDate:newDate];
} - (BOOL) isLastWeek
{
NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] - D_WEEK;
NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
return [self isSameWeekAsDate:newDate];
} - (BOOL) isSameMonthAsDate: (NSDate *) aDate
{
NSDateComponents *components1 = [CURRENT_CALENDAR components:NSCalendarUnitYear | NSCalendarUnitMonth fromDate:self];
NSDateComponents *components2 = [CURRENT_CALENDAR components:NSCalendarUnitYear | NSCalendarUnitMonth fromDate:aDate];
return ((components1.month == components2.month) &&
(components1.year == components2.year));
} - (BOOL) isThisMonth
{
return [self isSameMonthAsDate:[NSDate date]];
} - (BOOL) isSameYearAsDate: (NSDate *) aDate
{
NSDateComponents *components1 = [CURRENT_CALENDAR components:NSCalendarUnitYear fromDate:self];
NSDateComponents *components2 = [CURRENT_CALENDAR components:NSCalendarUnitYear fromDate:aDate];
return (components1.year == components2.year);
} - (BOOL) isThisYear
{
return [self isSameYearAsDate:[NSDate date]];
} - (BOOL) isNextYear
{
NSDateComponents *components1 = [CURRENT_CALENDAR components:NSCalendarUnitYear fromDate:self];
NSDateComponents *components2 = [CURRENT_CALENDAR components:NSCalendarUnitYear fromDate:[NSDate date]]; return (components1.year == (components2.year + ));
} - (BOOL) isLastYear
{
NSDateComponents *components1 = [CURRENT_CALENDAR components:NSCalendarUnitYear fromDate:self];
NSDateComponents *components2 = [CURRENT_CALENDAR components:NSCalendarUnitYear fromDate:[NSDate date]]; return (components1.year == (components2.year - ));
} - (BOOL) isEarlierThanDate: (NSDate *) aDate
{
return ([self compare:aDate] == NSOrderedAscending);
} - (BOOL) isLaterThanDate: (NSDate *) aDate
{
return ([self compare:aDate] == NSOrderedDescending);
} - (BOOL) isInFuture
{
return ([self isLaterThanDate:[NSDate date]]);
} - (BOOL) isInPast
{
return ([self isEarlierThanDate:[NSDate date]]);
} #pragma mark Roles
- (BOOL) isTypicallyWeekend
{
NSDateComponents *components = [CURRENT_CALENDAR components:NSCalendarUnitWeekday fromDate:self];
if ((components.weekday == ) ||
(components.weekday == ))
return YES;
return NO;
} - (BOOL) isTypicallyWorkday
{
return ![self isTypicallyWeekend];
} #pragma mark Adjusting Dates - (NSDate *) dateByAddingDays: (NSInteger) dDays
{
NSTimeInterval aTimeInterval = [self timeIntervalSinceReferenceDate] + D_DAY * dDays;
NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
return newDate;
} - (NSDate *) dateBySubtractingDays: (NSInteger) dDays
{
return [self dateByAddingDays: (dDays * -)];
} - (NSDate *) dateByAddingHours: (NSInteger) dHours
{
NSTimeInterval aTimeInterval = [self timeIntervalSinceReferenceDate] + D_HOUR * dHours;
NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
return newDate;
} - (NSDate *) dateBySubtractingHours: (NSInteger) dHours
{
return [self dateByAddingHours: (dHours * -)];
} - (NSDate *) dateByAddingMinutes: (NSInteger) dMinutes
{
NSTimeInterval aTimeInterval = [self timeIntervalSinceReferenceDate] + D_MINUTE * dMinutes;
NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
return newDate;
} - (NSDate *) dateBySubtractingMinutes: (NSInteger) dMinutes
{
return [self dateByAddingMinutes: (dMinutes * -)];
} - (NSDate *) dateAtStartOfDay
{
NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self];
components.hour = ;
components.minute = ;
components.second = ;
return [CURRENT_CALENDAR dateFromComponents:components];
} - (NSDateComponents *) componentsWithOffsetFromDate: (NSDate *) aDate
{
NSDateComponents *dTime = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:aDate toDate:self options:];
return dTime;
} #pragma mark Retrieving Intervals - (NSInteger) minutesAfterDate: (NSDate *) aDate
{
NSTimeInterval ti = [self timeIntervalSinceDate:aDate];
return (NSInteger) (ti / D_MINUTE);
} - (NSInteger) minutesBeforeDate: (NSDate *) aDate
{
NSTimeInterval ti = [aDate timeIntervalSinceDate:self];
return (NSInteger) (ti / D_MINUTE);
} - (NSInteger) hoursAfterDate: (NSDate *) aDate
{
NSTimeInterval ti = [self timeIntervalSinceDate:aDate];
return (NSInteger) (ti / D_HOUR);
} - (NSInteger) hoursBeforeDate: (NSDate *) aDate
{
NSTimeInterval ti = [aDate timeIntervalSinceDate:self];
return (NSInteger) (ti / D_HOUR);
} - (NSInteger) daysAfterDate: (NSDate *) aDate
{
NSTimeInterval ti = [self timeIntervalSinceDate:aDate];
return (NSInteger) (ti / D_DAY);
} - (NSInteger) daysBeforeDate: (NSDate *) aDate
{
NSTimeInterval ti = [aDate timeIntervalSinceDate:self];
return (NSInteger) (ti / D_DAY);
} - (NSInteger)distanceInDaysToDate:(NSDate *)anotherDate
{
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *components = [gregorianCalendar components:NSCalendarUnitDay fromDate:self toDate:anotherDate options:];
return components.day;
} #pragma mark Decomposing Dates - (NSInteger) nearestHour
{
NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] + D_MINUTE * ;
NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
NSDateComponents *components = [CURRENT_CALENDAR components:NSCalendarUnitHour fromDate:newDate];
return components.hour;
} - (NSInteger) hour
{
NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self];
return components.hour;
} - (NSInteger) minute
{
NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self];
return components.minute;
} - (NSInteger) seconds
{
NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self];
return components.second;
} - (NSInteger) day
{
NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self];
return components.day;
} - (NSInteger) month
{
NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self];
return components.month;
} - (NSInteger) week
{
NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self];
return components.weekOfYear;
} - (NSInteger) weekday
{
NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self];
return components.weekday;
} - (NSInteger) nthWeekday // e.g. 2nd Tuesday of the month is 2
{
NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self];
return components.weekdayOrdinal;
} - (NSInteger) year
{
NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self];
return components.year;
} #pragma mark 格式化日期
+ (id)dateFormatter
{
return [[self alloc] init];
} + (id)dateFormatterWithFormat:(NSString *)dateFormat
{
NSDateFormatter *dateFormatter = [[self alloc] init];
dateFormatter.dateFormat = dateFormat;
return dateFormatter;
} + (id)defaultDateFormatter
{
return [self dateFormatterWithFormat:@"yyyy-MM-dd HH:mm:ss"];
} @end
iOS NSDate 常用日期相关函数的封装的更多相关文章
- iOS NSDate等时间类的使用
一.NSDate NSDate对象用来表示一个具体的时间点. NSDate是一个类簇,我们所使用的NSDate对象,都是NSDate的私有子类的实体. NSDate存储的是GMT时间,使用的时候会根据 ...
- iOS中的日期和时间
转载于http://www.jianshu.com/p/ee279c175cf8 一.时间和日期计算 我们在应用开发中,时常需要和时间打交道,比如获取当前时间,获取两个时间点相隔的时间等等,在iOS开 ...
- iOS比较常用的第三方及实例(不断更新中)
把平时看到或项目用到的一些插件进行整理,文章后面分享一些不错的实例,若你有其它的插件欢迎分享,不断的进行更新: 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com ...
- IOS NSDate NSDateFormatter 导致相差8小时
时间问题应该是所有编程语言都要处理的.详细学过php的同学知道,php中也会有相差8小时的问题,然而php可以非常方便的解决的,直接设置下就好了 我最近在学习IOS的过程中,发现IOS的日期处理也是个 ...
- IOS 开发-- 常用-- 核心代码
网络请求 (包含block 和 delegate) 数据持久化技术 手势处理’ XML数据解析 多线程实现 核心动画编程 地图定位功能 CoreData数据持久化技术 本地通知和推送通知 常用宏定义 ...
- iOS开发常用第三方库
UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...
- iOS开发-常用第三方开源框架介绍
iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网 ...
- PHP中的日期相关函数(二)
上回文章中我们介绍了三个时间日期相关的对象,不过它们的出镜频率并不是特别地高.今天学习的对象虽说可能不少人使用过,但是它的出镜频率也是非常低的.它们其实就是我们非常常用的那些面向过程的日期函数的面向对 ...
- NSDate 总结日期操作
IOS Object-c NSDate总结日期操作 //NSDate //1, 创建NSDate对象 NSDate *nowDate = [NSDate date]; NSLog(@"%@& ...
随机推荐
- Linux下启动mongodb
完成安装mongodb(略) 创建数据目录: # mkdir /data/mongo 创建配置文件 # vi /data/mongo/mongodb.cnf dbpath=/data/mongo/ l ...
- stdout引发的curl 302跳转 crash
重现步骤: 0.开发环境:Windows 7 SP1 64bit, VS2008 SP1 1.进程中修改了stdout这个句柄的值:调用了prinft和cout都会修改stdout,TRACE不会修改 ...
- OS__信号量(semaphore)PV操作
信号量的概念 1.信号量的类型定义 信号量(semaphore)的数据结构为记录型数据结构一个值和一个指针,指针指向等待该信号量的下一个进程.信号量的值与相应资源的使用情况有关,在操作系统中,信号量用 ...
- TCPflow:在Linux中分析和调试网络流量的利器(转)
TCPflow是一款功能强大的.基于命令行的免费开源工具,用于在Unix之类的系统(如Linux)上分析网络流量.它可捕获通过TCP连接接收或传输的数据,并存储在文件中供以后分析,采用的格式便于协议分 ...
- 洛谷 - P1593 - 因子和 - 费马小定理
类似的因为模数比较小的坑还有卢卡斯定理那道,也是有时候逆元会不存在,因为整除了.使用一些其他方法避免通过逆元. https://www.luogu.org/fe/problem/P1593 有坑.一定 ...
- HDU - 1019 - Least Common Multiple - 质因数分解
http://acm.hdu.edu.cn/showproblem.php?pid=1019 LCM即各数各质因数的最大值,搞个map乱弄一下就可以了. #include<bits/stdc++ ...
- vue-cli目录结构介绍002
总体框架 一个vue-cli的项目结构如下,其中src文件夹是需要掌握的,所以本文也重点讲解其中的文件,至于其他相关文件,了解一下即可. 文件结构细分 1.build——[webpack配置] bui ...
- Kinect SDK(1):读取彩色、深度、骨骼信息并用OpenCV显示
Kinect SDK 读取彩色.深度.骨骼信息并用OpenCV显示 一.原理说明 对于原理相信大家都明白大致的情况,因此,在此只说比较特别的部分. 1.1 深度流数据: 深度数据流所提供的图像帧中,每 ...
- Windows下SVN的下载、安装
SVN全称Subversion,是一款优秀的版本控制工具. SVN分为服务器.客户端两部分,服务器和客户端版本很多,有的是收费的,有的需要注册.我们选择免费.不用注册的. 以VisualSVN作为服务 ...
- zookeeper master 选举
原文地址: http://www.cnblogs.com/nevermorewang/p/5611807.html 选主原理介绍:zookeeper的节点有两种类型,持久节点跟临时节点.临时节点有个特 ...