取当前时间的秒数
NSTimeIntervallong
NSLog(@”date\n%d”,
//把秒数转化成yyyy-MM-dd
NSDate
NSLog(@”d:%@”,dd);
//给一个时间秒数,取出对应的时间
NSString
NSDate
NSLog(@”dddd:%@”,d);
NSDateFormatter
[formatter1
NSString
NSLog(@”showtimeNew:%@”,showtimeNew);
[formatter1
1.
用于创建NSDate实例的类方法有
+
返回当前时间
+
返回以当前时间为基准,然后过了secs秒的时间
+
返回以2001/01/01
+
返回以1970/01/01
+
返回很多年以后的未来的某一天。(比如你需要一个比现在(Now)晚(大)很长时间的时间值,则可以调用该方法。测试返回了4000/12/31
+
返回很多年以前的某一天。(比如你需要一个比现在(Now)早(小)大很长时间的时间值,则可以调用该方法。测试返回了公元前0001/12/31
用于创建NSDate实例的实例方法有
-
返回以目前的实例中保存的时间为基准,然后过了secs秒的时间
用于初始化NSDate实例的实例方法有
-
初始化为当前时间。类似date方法
初始化为以2001/01/01
-
初始化为以refDate为基准,然后过了secs秒的时间
-
初始化为以当前时间为基准,然后过了secs秒的时间
2.
-
与otherDate比较,相同返回YES
-
与anotherDate比较,返回较早的那个日期
-
与anotherDate比较,返回较晚的那个日期
-
该方法用于排序时调用:
.
.
.
3.
-
以refDate为基准时间,返回实例保存的时间与refDate的时间间隔
-
以当前时间(Now)为基准时间,返回实例保存的时间与当前时间(Now)的时间间隔
-
以1970/01/01
-
以2001/01/01
+
以2001/01/01
4.
-
以YYYY-MM-DD
将时区设成本地:
NSTimeZone *zone = [NSTimeZonesystemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:date];
NSDate *localeDate = [date addTimeInterval:interval];
NSString和NSDate互转需要用到NSDateFormatter,设置一下timezone和format即可,直接上代码
NSString和NSDate互转需要用到NSDateFormatter,设置一下timezone和format即可,直接上代码
- NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
- NSTimeZone *timeZone = [NSTimeZone localTimeZone];
- [formatter setTimeZone:timeZone];
- [formatter setDateFormat : @"M/d/yyyy h:m a"];
- NSString *stringTime = @"12/5/2011 3:4 am";
- NSDate *dateTime = [formatter dateFromString:stringTime];
- NSLog(@"%@", dateTime);//打印2011-12-04 19:04:00 +0000,这里+0000表示时区
- NSDate *dateNow = [NSDate date];
- NSLog(@"%@", dateNow);//打印2011-08-17 08:26:57 +0000,这里+0000表示时区
- [formatter setDateFormat : @"yyyy年M月d日 H点m分"];
- NSLog(@"%@", [formatter stringFromDate:dateNow]);//打印2011年8月17日 16点26分
关于format中的每个字母代表的意思,可以到这里去查: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DataFormatting/Articles/df100103.html#//apple_ref/doc/uid/TP40007972-SW1 ,拉到中间的部分即可看到
今天发现用NSDateFormatter的stringFromDate方法将服务器传过来的背景时间的NSDate转换成NSString会相差8小时,调查发现,可能是因为stringFromDate时,将date当做格林威治时间了,返回的String变成本地时区。所以差了8个小时。
我用的方式是:
1 | NSDateFormatter* formate=[[NSDateFormatter alloc]init]; |
2 | [formate setDateFormat:DATE_FORMAT_SPLIT]; |
3 | [formate setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; |
4 | [formate stringFromDate:date] |
当然,好像方法不是唯一的。
1.4.2 日期和时间
我们使用NSDate类比较日期,并计算两个日期之间的日期和时间间隔:
可以用当前的日期和时间创建一个NSDate:
- NSDate *myDate = [NSDate date];
可以创建一个NSDate,表示从现在开始的24小时:
- NSTimeInterval secondsPerDay =
- 4*60*60;
- NSDate *tomorrow = [NSDate
- -ateWithTimeIntervalSinceNow:
- -econdsPerDay];
可以使用如下代码,根据一个已有的日期创建一个日期:
- NSTimeInterval secondsPerDay =
- 4*60*60;
- NSDate *now = [NSDate date];
- NSDate *yesterday = [now
- -ddTimeInterval:-secondsPerDay];
可以比较两个日期是否完全相等:
- BOOL sameDate =
- -date1 isEqualToDate:date2];
或者,判断一个日期是在另一个日期之前还是之后,使用如下代码:
- NSDate *earlierDate =
- -date1 earlierDate:date2];
- NSDate *laterDate =
- -date1 laterDate:date2];
可以计算两个日期之间相隔多少秒:
- NSTimeInterval secondsBetweenDates =
- -date2 timeIntervalSinceDate:
- -ate1];
或者可以计算现在和将来的一个日期之间相隔多少秒:
- NSTimeInterval secondsUntilTomorrow
- [tomorrow timeIntervalSinceNow];
通过使用NSCalendar类,我们可以更加容易地创建NSDate对象。
例如,创建一个表示2010年6月1日的日期,使用如下代码:
- NSDateComponents *comp =
- -[NSDateComponents alloc] init];
- [comp setMonth:06];
- [comp setDay:01];
- [comp setYear:2010];
- NSCalendar *myCal = [[NSCalendar
- -lloc] initWithCalendarIdentifier:
- -SGregorianCalendar];
- NSDate *myDate =
- -myCal dateFromComponents:comp];
类似地,从一个已有的日期中获取日期、月份和年份等组成部分,使用如下代码:
- unsigned units = NSMonthCalendarUnit
- - NSDayCalendarUnit |
- NSYearCalendarUnit;
- NSDate *now =[NSDate date];
- NSCalendar *myCal = [[NSCalendar
- -lloc] initWithCalendarIdentifier:
- -SGregorianCalendar];
- NSDateComponents *comp = [myCal
- -omponents:units fromDate:now];
- NSInteger month = [comp month];
- NSInteger day = [comp day];
- NSInteger year = [comp year];
当通过已有的日期创建日期的时候,创建日历也会变得更容易一些,因为我们不必把所有内容转换为秒以及从秒转换过来。
例如,重新编写前面创建的一个表示明天日期的例子,使用如下的代码:
- NSDate *now = [NSDate date];
- NSDateComponents *comp =
- -[NSDateComponents alloc] init];
- [comp setDay:01];
- NSCalendar *myCal = [[NSCalendar
- -lloc] initWithCalendarIdentifier:
- -SGregorianCalendar];
- NSDate *tomorrow = [myCal
- -ateByAddingComponents:comp
- -oDate:now options:0];
当我们想要把可供人类阅读的日期和时间显示给用户,NSDate本身并不是特别容易实现。因此,我们通常会使用NSDateFormatter。
使用NSDateFormatter获得表示当前日期的一个字符串,使用如下代码:
- NSDate *now = [NSDate date];
- NSDateFormatter *formatter =
- -[NSDateFormatter alloc] init];
- [formatter setDateStyle:
- -SDateFormatterMediumStyle];
- NSString *friendlyDate =
- -formatter stringFromDate:now];
获取当前时间,可以使用如下代码:
- NSDate *now = [NSDate date];
- NSDateFormatter *formatter =
- -[NSDateFormatter alloc] init];
- [formatter setTimeStyle:
- -SDateFormatterMediumStyle];
- NSString *friendlyTime =
- -formatter stringFromDate:now];
表1-2给出了5种预定义的格式化样式。
最后,也可以使用一个日期格式的dateFormat属性来手动地设置样式:
- NSDate *now = [NSDate date];
- NSDateFormatter *formatter =
- -[NSDateFormatter alloc] init];
- [formatter setDateFormat:
- -"yyyy-mm-dd"];
- NSString *friendlyDate =
- -formatter stringFromDate:now];
注意formatter的格式大小写必须严格按照文档提供的,否则会出现错误!