NSDate 使用 ios时间的秒数
2013-08-02 12:14
483 查看
取当前时间的秒数
NSTimeInterval time = [[NSDate date] timeIntervalSince1970];
long long int date = (long long int)time;
NSLog(@”date\n%d”, date); //1295322949
//把秒数转化成yyyy-MM-dd hh:mm:ss格式
NSDate *dd = [NSDate dateWithTimeIntervalSince1970:date];
NSLog(@”d:%@”,dd); //2011-01-18 03:55:49 +0000
//给一个时间秒数,取出对应的时间
NSString *s = @”1295355600000″; //对应21:00
NSDate *d = [NSDate dateWithTimeIntervalSince1970:[s doubleValue]/1000];
NSLog(@”dddd:%@”,d); //2011-01-18 13:00:00 +0000
NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
[formatter1 setDateFormat:@"HH:mm"];
NSString *showtimeNew = [formatter1 stringFromDate:d];
NSLog(@”showtimeNew:%@”,showtimeNew); //21:00 比d的时间 +8小时
[formatter1 release];
1. 创建或初始化可用以下方法
用于创建NSDate实例的类方法有
+ (id)date;
返回当前时间
+ (id)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;
返回以当前时间为基准,然后过了secs秒的时间
+ (id)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)secs;
返回以2001/01/01 GMT为基准,然后过了secs秒的时间
+ (id)dateWithTimeIntervalSince1970:(NSTimeInterval)secs;
返回以1970/01/01 GMT为基准,然后过了secs秒的时间
+ (id)distantFuture;
返回很多年以后的未来的某一天。(比如你需要一个比现在(Now)晚(大)很长时间的时间值,则可以调用该方法。测试返回了4000/12/31 16:00:00)
+ (id)distantPast;
返回很多年以前的某一天。(比如你需要一个比现在(Now)早(小)大很长时间的时间值,则可以调用该方法。测试返回了公元前0001/12/31 17:00:00)
用于创建NSDate实例的实例方法有
- (id)addTimeInterval:(NSTimeInterval)secs;
返回以目前的实例中保存的时间为基准,然后过了secs秒的时间
用于初始化NSDate实例的实例方法有
- (id)init;
初始化为当前时间。类似date方法
初始化为以2001/01/01 GMT为基准,然后过了secs秒的时间。类似dateWithTimeIntervalSinceReferenceDate:方法
- (id)initWithTimeInterval:(NSTimeInterval)secs sinceDate:(NSDate *)refDate;
初始化为以refDate为基准,然后过了secs秒的时间
- (id)initWithTimeIntervalSinceNow:(NSTimeInterval)secs;
初始化为以当前时间为基准,然后过了secs秒的时间
2. 日期之间比较可用以下方法
- (BOOL)isEqualToDate:(NSDate *)otherDate;
与otherDate比较,相同返回YES
- (NSDate *)earlierDate:(NSDate *)anotherDate;
与anotherDate比较,返回较早的那个日期
- (NSDate *)laterDate:(NSDate *)anotherDate;
与anotherDate比较,返回较晚的那个日期
- (NSComparisonResult)compare:(NSDate *)other;
该方法用于排序时调用:
. 当实例保存的日期值与anotherDate相同时返回NSOrderedSame
. 当实例保存的日期值晚于anotherDate时返回NSOrderedDescending
. 当实例保存的日期值早于anotherDate时返回NSOrderedAscending
3. 取回时间间隔可用以下方法
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)refDate;
以refDate为基准时间,返回实例保存的时间与refDate的时间间隔
- (NSTimeInterval)timeIntervalSinceNow;
以当前时间(Now)为基准时间,返回实例保存的时间与当前时间(Now)的时间间隔
- (NSTimeInterval)timeIntervalSince1970;
以1970/01/01 GMT为基准时间,返回实例保存的时间与1970/01/01 GMT的时间间隔
- (NSTimeInterval)timeIntervalSinceReferenceDate;
以2001/01/01 GMT为基准时间,返回实例保存的时间与2001/01/01 GMT的时间间隔
+ (NSTimeInterval)timeIntervalSinceReferenceDate;
以2001/01/01 GMT为基准时间,返回当前时间(Now)与2001/01/01 GMT的时间间隔
4. 将时间表示成字符串
- (NSString *)description;
以YYYY-MM-DD HH:MM:SS ±HHMM的格式表示时间。(其中 “±HHMM” 表示与GMT的存在多少小时多少分钟的时区差异。比如,若时区设置在北京,则 “±HHMM” 显示为 “+0800″)
将时区设成本地:
NSTimeZone *zone = [NSTimeZonesystemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:date];
NSDate *localeDate = [date addTimeInterval:interval];
NSString和NSDate互转需要用到NSDateFormatter,设置一下timezone和format即可,直接上代码
NSString和NSDate互转需要用到NSDateFormatter,设置一下timezone和format即可,直接上代码
[cpp] view
plaincopy
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.4.2 日期和时间
我们使用NSDate类比较日期,并计算两个日期之间的日期和时间间隔:
可以用当前的日期和时间创建一个NSDate:
可以创建一个NSDate,表示从现在开始的24小时:
可以使用如下代码,根据一个已有的日期创建一个日期:
可以比较两个日期是否完全相等:
或者,判断一个日期是在另一个日期之前还是之后,使用如下代码:
可以计算两个日期之间相隔多少秒:
或者可以计算现在和将来的一个日期之间相隔多少秒:
通过使用NSCalendar类,我们可以更加容易地创建NSDate对象。
例如,创建一个表示2010年6月1日的日期,使用如下代码:
类似地,从一个已有的日期中获取日期、月份和年份等组成部分,使用如下代码:
当通过已有的日期创建日期的时候,创建日历也会变得更容易一些,因为我们不必把所有内容转换为秒以及从秒转换过来。
例如,重新编写前面创建的一个表示明天日期的例子,使用如下的代码:
当我们想要把可供人类阅读的日期和时间显示给用户,NSDate本身并不是特别容易实现。因此,我们通常会使用NSDateFormatter。
使用NSDateFormatter获得表示当前日期的一个字符串,使用如下代码:
获取当前时间,可以使用如下代码:
表1-2给出了5种预定义的格式化样式。
最后,也可以使用一个日期格式的dateFormat属性来手动地设置样式:
注意formatter的格式大小写必须严格按照文档提供的,否则会出现错误!
NSTimeInterval time = [[NSDate date] timeIntervalSince1970];
long long int date = (long long int)time;
NSLog(@”date\n%d”, date); //1295322949
//把秒数转化成yyyy-MM-dd hh:mm:ss格式
NSDate *dd = [NSDate dateWithTimeIntervalSince1970:date];
NSLog(@”d:%@”,dd); //2011-01-18 03:55:49 +0000
//给一个时间秒数,取出对应的时间
NSString *s = @”1295355600000″; //对应21:00
NSDate *d = [NSDate dateWithTimeIntervalSince1970:[s doubleValue]/1000];
NSLog(@”dddd:%@”,d); //2011-01-18 13:00:00 +0000
NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
[formatter1 setDateFormat:@"HH:mm"];
NSString *showtimeNew = [formatter1 stringFromDate:d];
NSLog(@”showtimeNew:%@”,showtimeNew); //21:00 比d的时间 +8小时
[formatter1 release];
1. 创建或初始化可用以下方法
用于创建NSDate实例的类方法有
+ (id)date;
返回当前时间
+ (id)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;
返回以当前时间为基准,然后过了secs秒的时间
+ (id)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)secs;
返回以2001/01/01 GMT为基准,然后过了secs秒的时间
+ (id)dateWithTimeIntervalSince1970:(NSTimeInterval)secs;
返回以1970/01/01 GMT为基准,然后过了secs秒的时间
+ (id)distantFuture;
返回很多年以后的未来的某一天。(比如你需要一个比现在(Now)晚(大)很长时间的时间值,则可以调用该方法。测试返回了4000/12/31 16:00:00)
+ (id)distantPast;
返回很多年以前的某一天。(比如你需要一个比现在(Now)早(小)大很长时间的时间值,则可以调用该方法。测试返回了公元前0001/12/31 17:00:00)
用于创建NSDate实例的实例方法有
- (id)addTimeInterval:(NSTimeInterval)secs;
返回以目前的实例中保存的时间为基准,然后过了secs秒的时间
用于初始化NSDate实例的实例方法有
- (id)init;
初始化为当前时间。类似date方法
初始化为以2001/01/01 GMT为基准,然后过了secs秒的时间。类似dateWithTimeIntervalSinceReferenceDate:方法
- (id)initWithTimeInterval:(NSTimeInterval)secs sinceDate:(NSDate *)refDate;
初始化为以refDate为基准,然后过了secs秒的时间
- (id)initWithTimeIntervalSinceNow:(NSTimeInterval)secs;
初始化为以当前时间为基准,然后过了secs秒的时间
2. 日期之间比较可用以下方法
- (BOOL)isEqualToDate:(NSDate *)otherDate;
与otherDate比较,相同返回YES
- (NSDate *)earlierDate:(NSDate *)anotherDate;
与anotherDate比较,返回较早的那个日期
- (NSDate *)laterDate:(NSDate *)anotherDate;
与anotherDate比较,返回较晚的那个日期
- (NSComparisonResult)compare:(NSDate *)other;
该方法用于排序时调用:
. 当实例保存的日期值与anotherDate相同时返回NSOrderedSame
. 当实例保存的日期值晚于anotherDate时返回NSOrderedDescending
. 当实例保存的日期值早于anotherDate时返回NSOrderedAscending
3. 取回时间间隔可用以下方法
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)refDate;
以refDate为基准时间,返回实例保存的时间与refDate的时间间隔
- (NSTimeInterval)timeIntervalSinceNow;
以当前时间(Now)为基准时间,返回实例保存的时间与当前时间(Now)的时间间隔
- (NSTimeInterval)timeIntervalSince1970;
以1970/01/01 GMT为基准时间,返回实例保存的时间与1970/01/01 GMT的时间间隔
- (NSTimeInterval)timeIntervalSinceReferenceDate;
以2001/01/01 GMT为基准时间,返回实例保存的时间与2001/01/01 GMT的时间间隔
+ (NSTimeInterval)timeIntervalSinceReferenceDate;
以2001/01/01 GMT为基准时间,返回当前时间(Now)与2001/01/01 GMT的时间间隔
4. 将时间表示成字符串
- (NSString *)description;
以YYYY-MM-DD HH:MM:SS ±HHMM的格式表示时间。(其中 “±HHMM” 表示与GMT的存在多少小时多少分钟的时区差异。比如,若时区设置在北京,则 “±HHMM” 显示为 “+0800″)
将时区设成本地:
NSTimeZone *zone = [NSTimeZonesystemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:date];
NSDate *localeDate = [date addTimeInterval:interval];
NSString和NSDate互转需要用到NSDateFormatter,设置一下timezone和format即可,直接上代码
NSString和NSDate互转需要用到NSDateFormatter,设置一下timezone和format即可,直接上代码
[cpp] view
plaincopy
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的格式大小写必须严格按照文档提供的,否则会出现错误!
相关文章推荐
- iOS NSDateFormatter 和 NSDate简单使用 时间戳的转换
- iOS————使用NSdate获取播放时间
- iOS NSDate等时间类的使用
- iOS NSDate等时间类的使用
- IOS中NSdate转换时间的具体使用 和把时间转化为时间戳的使用
- ios正在使用NSDateComponents、NSDate、NSCalendar它的结论是在当前时间是在一段时间在一天。
- iOS NSDate的基本使用,获取时间戳
- iOS开发中获取上月的起止时间(NSCalendar、NSDateComponents和NSDate的使用)
- iOS开发学习专题-基础知识(五) NSDate时间 NSUserDefaults本地存储 NSNotification系统通知的详细使用方式
- IOS第12天(4,作业弹出键盘上加上(xib)view的处理,时间选择,代理模式使用,键盘的监听 )
- iOS开发-基础:NSDate 使用
- 使用 NSDate,NSCalendar, NSDateComponents 获得时间之差总结
- [置顶] iOS使用AFN设置请求超时时间并做处理
- iOS 日期格式化, NSDateFormatter,把服务器返回的时间,格式化为时间戳
- ios--MBProgressHUD(使用方式一)--在事件的执行过程中显示+指定显示时间长短
- 集合间相互转换,浅谈相关内存管理,使用NSData处理数据,使用NSDate - iOS
- iOS NSDateFormatter日期时间格式处理的用法
- ios NSDate NSTring long 时间戳与字符串转换
- iOS NSDate比较两个时间的大小
- IOS开发之----NSDateFormatter调整时间格式