欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

IOS NSTimeInterval使用案例详解

程序员文章站 2022-06-23 12:22:38
一 ios 获取时间间隔想在程序开始或者进入某个界面 ,到结束程序或退出某个界面,获取到这个持续时间. 获取到这个时间还需要转化一个取得时分秒.-(nsstring *)getcurrenttime{...

一 ios 获取时间间隔

想在程序开始或者进入某个界面 ,到结束程序或退出某个界面,获取到这个持续时间. 获取到这个时间还需要转化一个取得时分秒.
-(nsstring *)getcurrenttime

{

    nsdateformatter *formatter = [[nsdateformatter alloc] init];

    [formatter setdateformat:@"yyyy-mm-dd hh:mm:ss"];

    nsstring *datetime = [formatter stringfromdate:[nsdate date]];

    self.starttime = datetime;

    return starttime;

}

date1代表开始时间,在开始计时的地方调用 [self getcurrenttime]; 在结束时的方法里写如下代码:

nsdateformatter *formatter = [[nsdateformatter alloc] init];

[formatter setdateformat:@"yyyy-mm-dd hh:mm:ss"];

nsdate *date1 = [formatter datefromstring:starttime];

nsdate *date2 = [nsdate date];

nstimeinterval atimer = [date2 timeintervalsincedate:date1];

 

int hour = (int)(atimer/3600);

int minute = (int)(atimer - hour*3600)/60;

int second = atimer - hour*3600 - minute*60;

nsstring *dural = [nsstring stringwithformat:@"%d时%d分%d秒", hour, minute,second];

二 我想把它转换成分钟和秒。

比如我有:“326.4”秒,我想把它转换成下面的字符串: “5:26”。 什么是实现这一目标的最佳方法是什么?

1. 伪代码:

minutes = floor(326.4/60)
seconds = round(326.4 - minutes * 60)

2. 简述 从布赖恩・拉姆齐答案是更方便的,如果你只是想转换为分钟。 如果你想cocoa api的为你做它和转换您不仅分钟,但也给天,月,星期等,...我认为这是一个更通用的方法 使用

(nsdatecomponents *)components:(nsuinteger)unitflags fromdate:(nsdate *)startingdate todate:(nsdate *)resultdate options:(nsuinteger)opts“返回,作为nsdatecomponents两者之间的差异提供的日期”。从api 创建2 nsdate的 codego.net,其区别是你要转换。 (如果你的2 nsdate的你不需要做这一步,你甚至不需要的 让你的quotes从nsdatecomponents 示例代码

// the time interval 
nstimeinterval thetimeinterval = 326.4;
// get the system calendar
nscalendar *syscalendar = [nscalendar currentcalendar];
// create the nsdates
nsdate *date1 = [[nsdate alloc] init];
nsdate *date2 = [[nsdate alloc] initwithtimeinterval:thetimeinterval sincedate:date1]; 
// get conversion to months, days, hours, minutes
unsigned int unitflags = nshourcalendarunit | nsminutecalendarunit | nsdaycalendarunit | nsmonthcalendarunit;
nsdatecomponents *conversioninfo = [syscalendar components:unitflags fromdate:date1 todate:date2 options:0];
nslog(@"conversion: %dmin %dhours %ddays %dmoths",[conversioninfo minute], [conversioninfo hour], [conversioninfo day], [conversioninfo month]);
[date1 release];
[date2 release];

已知问题 太多的只是一个转换,你是对的,但是这是api如何工作的。 我的建议:如果你要管理你的nsdate和nscalendar,该api将做艰苦的工作适合你。 

3. ,作为一个堆栈处女...我不知道如何回答布赖恩・拉姆齐的回答... 使用圆不会为59.5和59.99999之间第二值工作。第二个值将是60在此期间。使用trunc而不是...

double progress;
int minutes = floor(progress/60);
int seconds = trunc(progress - minutes * 60);

4. 布赖恩・拉姆齐的代码,去pseudofied:

- (nsstring*)formattedstringforduration:(nstimeinterval)duration
{
 nsinteger minutes = floor(duration/60);
 nsinteger seconds = round(duration - minutes * 60);
 return [nsstring stringwithformat:@"%d:%02d", minutes, seconds];
}

5. 所有这些看起来比他们需要!这里有一个简短而亲切的方式来转换的时间间隔为小时,分钟和秒:

nstimeinterval timeinterval = 326.4;
long seconds = lroundf(timeinterval); // modulo (%) operator below needs int or long
int hour = seconds / 3600
int mins = (seconds % 3600) / 60;
int secs = seconds % 60;

请注意,当你把一个浮点数转换为整数,你得到楼()自动完成,但你可以,如果要是让你感觉更好:-)它添加到的前两个 

6. 因为它本质上是一个双... 60.0划分和提取的组成部分和小数部分。 的组成部分,将是分钟的整数。 再乘以小数部分按60.0。 其结果将是剩下秒。

到此这篇关于ios nstimeinterval使用案例详解的文章就介绍到这了,更多相关ios nstimeinterval使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

相关标签: IOS NSTimeInterval