ios 声明的nsdate类型的 用什么strong 修饰

ios 声明的nsdate类型的 用什么strong 修饰,第1张

仅仅打印获得时间是格林威治时间, 是跟北京时间相差8个小时的下面这个是我写的代码, 题主可以参考下// 获取时间戳并且转化成字符串 NSDateFormatter myFormatter = [[NSDateFormatter alloc]init]; NSDate myDate = [NSDate date]; // 打印出来的时间是格林威治时间,想差8个小时,但是把这个时间转成字符串就是正确的北京时间 NSLog(@"currentTime is ---- %@", myDate); // 格林威治时间 [myFormatter setDateFormat:@"年月日是:yyyy-MM-dd 时分秒是:HH:mm:ss"]; // 把时间戳转成字符串 NSString currentTimeStr = [myFormatter stringFromDate:myDate]; NSLog(@"curremtTimeStr is ------%@", currentTimeStr); // 按字符串打印不会有时差

1 NSDate这个类就是生成一个date

如果你用[NSDate date]这个最最常用的方法你可以得到系统当前的时间(UTC时间,不管你当前时区的)

比如:

NSDate date = [NSDate date];

NSLog(@"%@", date);

输出:

2013-04-27 07:25:59 +0000

在类的头文件NSDateh中,我们可以看到所有的方法和类方法,但没有任何一个数据,所以我们可以打印出时间的字符串,但没办法单独去获得年、月、日等信息。

在苹果的官方文档上说这个类用来描述一个特定的时间点,也就是说可以记录一个瞬间的时间点,然后这个数据是不能修改的。

这个类提供方法来获得时间(过去,当前,未来都可以),计算两个时间之间的间隔,比较时间,描述时间内容

2 NSDateFormatter

顾名思义,这个类是描述date的打印显示格式,是配合NSDate类工作的。

因为不同地域习惯的格式不同,用户也会设置不同的格式,所以iOS提供了很丰富的设置方法,显示参数,基本上你能想到见到的方法都被一网打尽了。

你可以设置时间显示格式,日期格式,时间格式,还有时区等等,最方便的是,你还可以设置AM/PM,月份,星期的显示内容,这点在某些特殊情形时真的非常方便(默认的功能已经非常方便了)

– dateFormat

– setDateFormat:

– dateStyle

– setDateStyle:

– timeStyle

– setTimeStyle:

最常用的几个方法如下:

设置格式:

- (void)setDateFormat:(NSString )string;

打印成字符串信息:

- (NSString )stringFromDate:(NSDate )date;

设置格式模板:

+ (NSString )dateFormatFromTemplate:(NSString )tmplate options:(NSUInteger)opts locale:(NSLocale )locale NS_AVAILABLE(10_6, 4_0);

关于DateFormat的格式,先给出几个例子如下:

NSDate date = [NSDate date];

NSDateFormatter df = [[NSDateFormatter alloc] init];

[df setDateFormat:@"dd/MM/yyyy hh:mm:ss aaa"];

NSLog(@"curr=%@, dateFormate=%@", [df stringFromDate:date], dfdateFormat);

变化dataFormat就可以变化时间的输出格式

curr=27/04/2013 03:42:21 PM, dateFormate=dd/MM/yyyy hh:mm:ss aaa

curr=02013-4月-27 公元 03:45 PM, dateFormate=yyyyy-MMMM-dd GGG hh:mm aaa

curr=3:45 PM, 格林尼治标准时间+0800, dateFormate=K:mm a, z

curr=03 o'clock PM,中国标准时间, dateFormate=hh 'o''clock' a,zzzz

curr=3:46 PM, dateFormate=h:mm a

curr=周六, 4月 27, '13 , dateFormate=EEE, MMM d, ''yy

curr=2013:04:27 公元 at 15:47:11 格林尼治标准时间+0800, dateFormate=yyyy:MM:dd G 'at' HH:mm:ss zzz

这是在网上找的几个例子,如果要显示成自己希望的格式,那么还需要自己写出格式来

+ (NSString )dateFormatFromTemplate:(NSString )template options:(NSUInteger)opts locale:(NSLocale )locale

这个方法可以设置显示格式的模板,便于后面使用。

看到这里,估计大家都会想:这个格式的设置有没有什么规律呢,或者说按照什么方法来书写呢?

我带着这个问题搜索过,结果写在另一篇blog中《时间格式串的意义》

3 NSDateComponents类

这个类也没啥神秘的,就是可以得到我们比较熟悉的年月日时分秒信息,在一些计算显示场合很有用处,用NSDate类是无法单独来获得每一个元素信息的,必须使用这个NSDateComponents类。

4 NSCalendar类

这个类用来描述一种特定的日历。同时还提供了大部分基于时间计算的接口,并且把NSDate类和NSDateComponents类联系了起来。

这几个类本来看着各自实现各自的功能,但是所谓的年月日等等时间信息是必须配合一种历法才能表述的,比如:同一个日子,阳历和阴历就是可能不同的几号,甚至不同的月份不同的年份

所以当你说XXXX年XX月XX日的时候,机器一定是基于一种日历来的(最常用的当然是Gregorian历啦),所以仔细观察NSDateFormatter和NSDateComponents这两个类都有calendar这个数据成员。其中NSDateComponents这个类既有NSDate,又有NSCalendar成员。

- (NSDateComponents )components:(NSUInteger)unitFlags fromDate:(NSDate )date

根据标志,从NSDate转到NSDateComponents,这样可以获得对应的时间元素

- (NSDateComponents )components:(NSUInteger)unitFlags fromDate:(NSDate )startingDate toDate:(NSDate )resultDate options:(NSUInteger)opts

可以获得起始/终止时间之间的间隔,用NSDateComponents来表示

- (NSDate )dateByAddingComponents:(NSDateComponents )comps toDate:(NSDate )date options:(NSUInteger)opts

在加上一个NSDateComponents之后返回一个NSDate的对象

- (NSDate )dateFromComponents:(NSDateComponents )comps

从NSDateComponets对象转换为NSDate对象

NSDate d = [yourformatter dateFromString:theDate]; NSTimeInterval late = [d timeIntervalSince1970]1; NSString timeString = nil; NSDate dat = [NSDate dateWithTimeIntervalSinceNow:0]; NSTimeInterval now = [dat timeInterval

- (int)intervalSinceNow: (NSString ) theDate

{

NSDateFormatter date=[[NSDateFormatter alloc] init];

[date setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSDate d=[date dateFromString:theDate];

NSTimeInterval late=[d timeIntervalSince1970]1;

NSDate dat = [NSDate dateWithTimeIntervalSinceNow:0];

NSTimeInterval now=[dat timeIntervalSince1970]1;

NSString timeString=@"";

NSTimeInterval cha=now-late;

if (cha/86400>1)

{

timeString = [NSString stringWithFormat:@"%f", cha/86400];

timeString = [timeString substringToIndex:timeStringlength-7];

return [timeString intValue];

}

return -1;

}

面例计算相差几

计算其数值

cha/3600<1 钟

if (cha/3600>1&&cha/86400<1)

01

// 获取前期

02

NSDate date = [NSDate date];

03

04

// 打印结: 前间 date = 2013-08-16 09:00:04 +0000

05

NSLog(@"前间 date = %@",date);

06

07

// 获取某期始往前或者往久期处60代表60秒需要获取前60改-60即

08

date = [[NSDate alloc] initWithTimeInterval:60 sinceDate:[NSDate date]];

09

10

//打印结:前间 往60s间date = 2013-08-16 09:01:04 +0000

11

NSLog(@"前间 往60s间date = %@",date);

PS:测试间午5点前间却午9点相差8区问题

解决办:

1

NSTimeZone zone = [NSTimeZone systemTimeZone];

2

3

NSInteger interval = [zone secondsFromGMTForDate: date];

4

5

NSDate localDate = [date dateByAddingTimeInterval: interval];

6

7

// 打印结 确前间 localDate = 2013-08-16 17:01:04 +0000

8

NSLog(@"确前间 localDate = %@",localDate);

以上就是关于ios 声明的nsdate类型的 用什么strong 修饰全部的内容,包括:ios 声明的nsdate类型的 用什么strong 修饰、ios 怎么处理两个时间的间隔、ios 我怎么拿到前十年的nsdate等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9277030.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存