IOS中级篇 —— 日期时间对象

结合NSCalendar和NSDate能做更多的日期\时间处理 获得NSCalendar对象

NSCalendar *calendar = [NSCalendar currentCalendar];?获得年月日

- (NSDateComponents *)components:(NSCalendarUnit)unitFlags fromDate:(NSDate *)date;

//创建日期
NSDate?*d = [NSDate?date];

//创建日期对象
NSCalendar?*ca = [NSCalendar?currentCalendar];

//获得时间组件

NSDateComponents?*cms= [ca?components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:d];

NSLog(@"%ld-%ld-%ld",cms.year,cms.month,cms.day);

比较两个日期的差距
- (NSDateComponents *)components:(NSCalendarUnit)unitFlags fromDate:(NSDate *) startingDate toDate:(NSDate *)resultDate options:(NSCalendarOptions)opts;

NSString *time1 [email protected]"2014-04-08 20:50:40"; NSString *time2 [email protected]"2014-04-04 18:45:30";

NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; fmt.dateFormat [email protected]"yyyy-MM-dd HH:mm:ss";

NSDate *date1 = [fmt dateFromString:time1]; NSDate *date2 = [fmt dateFromString:time2];

?//取时间较早的那个

? ?? [date2?earlierDate:date1];

? ? ? ?

?//取较晚的那个

? ?? [date2?laterDate:date1];

//把字符串转换成日期
? ? ? ? //和上边类似,仍然需要日期格式化对象,但是调用的方法从stringFromDate变成
? ? ? ? //因为时区设置的问题,这个日期被减去了一天
? ? ? ? NSDateFormatter?*format2=[[NSDateFormatter?alloc]init];
? ? ? ? [format2?setDateFormat:@"yyyy/MM/dd"];
? ? ? ? NSString?*[email protected]"2014/10/11";
? ? ? ? NSLog(@"%@",[format2?dateFromString:str2]);

// 1.创建一个日历对象
NSCalendar?*calendar = [NSCalendar?currentCalendar];

// 2.比较时间的差距
int?unit =?NSCalendarUnitYear?|?NSCalendarUnitMonth?|?NSCalendarUnitDay
|?NSCalendarUnitHour?|?NSCalendarUnitMinute?|?NSCalendarUnitSecond;?

NSDateComponents?*cmps = [calendar?components:unit?fromDate:date2?toDate:date1?options:0];

NSLog(@"相差%ld年%ld月%ld天%ld小时%ld分钟%ld秒", cmps.year, cmps.month, cmps.day, cmps.hour, cmps.minute, cmps.second);

计算日期

//1)明天的此刻

NSTimeInterval secondsPerDay = 24*60*60;
NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:secondsPerDay]; NSLog(@"myDate = %@",tomorrow);

//2)昨天的现在
NSTimeInterval secondsPerDay1 = 24*60*60;

NSDate *now = [NSDate date];

NSDate *yesterDay = [now addTimeInterval:-secondsPerDay1]; NSLog(@"yesterDay = %@",yesterDay);

格式化日期

NSDate ----> dateString

//定义NSDate
NSDate?*d1 = [NSDate?date];

//定义日期时间格式化的类
NSDateFormatter?*formatter = [[NSDateFormatter?alloc]?init]; [email protected]"yyyy-MM-dd HH:mm:ss";

//把Date转换为dataStr
NSString?*dateStr = [formatter?stringFromDate:d1];

  • //??设置格式
  • //??fmt.dateFormat = @"今天?HH:mm";
  • //??HH : 24小时制
  • //??hh : 12小时制
  • //??yyyy :?年
  • //??MM :?月
  • //??dd :?号
  • //??mm :?分钟
  • //??ss :?秒
  • //??Z :?时区
时间: 2025-01-01 11:20:43

IOS中级篇 —— 日期时间对象的相关文章

JavaScript日期时间对象的创建与使用(三)

时钟效果一: 代码: <html> <head> <meta charset="utf-8"/> <title>JavaScript日期时间对象的创建与使用</title> </head> <body> <h2 id="time"></h2> <script type="text/javascript"> function Cl

IOS开发之日期时间格式化字符说明

在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理.例如: //实例化一个NSDateFormatter对象 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; //设定时间格式,这里可以设置成自己需要的格式 [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; //用[NSDate da

IOS中级篇—— 多线程--NSOperation

NSOperation 操作? 任务是对代码的封装, 操作是对任务的封装 --目的:就是可以随时的暂停/恢复/取消任务; NSOperation 对GCD的封装. OC 运用起来更加方便. 抽象类. 车 NSOperation的使用: <1> 操作直接调用 start方法,就是在当前线程执行(Block中封装的任务数大于1的情况除外). <2> 就是将操作放在队列中.自动的帮我们开启线程,来执行操作. 两个子类: NSInvocationOperation: 调用 ? ? ? 1.

IOS——中级篇 --TableView以及Cell

????? //? 设置tableView的行高 ??? self.tableView.rowHeight = 100;//? 设置tableView分割线的样式//? UITableViewCellSeparatorStyleNone 不显示分割线//? UITableViewCellSeparatorStyleSingleLine? 显示分割线(默认) ??? self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingl

IOS中级篇——何时使用copy,strong,weak,assign关键字 定义属性

? 父类指针可以指向子类对象 ? //定义block别名. typedef void (^LYItemOption)(); @interface LYItemArrow : LYItem@property(nonatomic,strong) Class desController; @property(nonatomic,copy) LYItemOption option; ? ? 1.strong :除NSString\block以外的OC对象 ? @property(nonatomic,st

IOS中级篇 —— 关于深复制和浅复制

?深复制(深拷贝,内容拷贝,deep?copy) ?源对象和副本对象是不同的两个对象 ?源对象引用计数器不变,?副本对象计数器为1(因为是新产生的) ?本质是:产生了新的对象 ? ?浅复制(浅拷贝,指针拷贝,shallow?copy) ?源对象和副本对象是同一个对象 ?源对象(副本对象)引用计数器?+?1,?相当于做一次retain操作 ?本质是:没有产生新的对象

IOS中级篇 —— 手动内存管理

retainCount?? //dealloc方法,是对象的临终遗言的方法 //对象被销毁的时候,会默认的调用该方法 //注意:dealloc 方法是系统根据引用计数器的值,自动调用的, 野指针 内存泄露 @property??参数 @class 使用 循环retain解决方法 自动释放池?? @autoreleasepool

IOS中级篇 —— 多线程 - GCD

GCD 是c语言的框架,不需要手动管理内存 是一个面向任务   不是面向线程,不需要管理线程的生命周期 GCD 任务/队列 执行函数 任务:Block  任务都封闭在Block中.  —— 线程执行 队列:存放任务    FIFO (先进先出的原则) GCD中的队列: 串行队列:想要任务按顺序执行 //    创建一个串行队列 dispatch_queue_t serialQueue = dispatch_queue_create("serial", DISPATCH_QUEUE_SE

IOS中级篇 —— Autoresizing

? UIView *blueView = [[UIView alloc] init]; ??? [self.view addSubview:blueView]; ??? blueView.backgroundColor = [UIColor blueColor]; ??? ??? blueView.center = self.view.center; ??? blueView.bounds = CGRectMake(0, 0, 150, 150); ??? self.blueView = blu