亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在iPhone上將NSTimeInterval分解為年,月,日,小時,分鐘和秒?

如何在iPhone上將NSTimeInterval分解為年,月,日,小時,分鐘和秒?

iOS
慕虎7371278 2019-12-20 10:57:25
我的時間跨度跨度數年,并且我希望所有時間成分都從一年到幾秒。我的第一個想法是將時間間隔整數除以一年中的秒數,再減去連續運行的秒數,再除以一個月中的秒數,再減去運行總數,以此類推。這似乎有些令人費解,而且我讀到,每當您做一些看起來令人費解的事情時,可能都有一個內置方法。在那兒?我將Alex的第二種方法集成到了我的代碼中。它在我的界面中由UIDatePicker調用的方法中。NSDate *now = [NSDate date];NSDate *then = self.datePicker.date;NSTimeInterval howLong = [now timeIntervalSinceDate:then];NSDate *date = [NSDate dateWithTimeIntervalSince1970:howLong];NSString *dateStr = [date description];const char *dateStrPtr = [dateStr UTF8String];int year, month, day, hour, minute, sec;sscanf(dateStrPtr, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &sec);year -= 1970;NSLog(@"%d years\n%d months\n%d days\n%d hours\n%d minutes\n%d seconds", year, month, day, hour, minute, sec);當我將日期選擇器設置為過去1年零1天的日期時,我得到:1年1個月1天16小時0分鐘20秒這是1個月零16個小時的時間。如果我將日期選擇器設置為過去的1天,我的退稅額也一樣。更新:我有一個應用程序,根據您的生日(通過UIDatePicker設置),以年為單位計算您的年齡,但是它經常關閉。這證明存在不準確之處,但我不知道它來自哪里,可以嗎?
查看完整描述

3 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

簡要描述;簡介


這是完成JBRWilkinson答案的另一種方法,但添加了一些代碼。它還可以為Alex Reynolds的評論提供解決方案。


使用NSCalendar方法:


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


“使用指定的組件作為兩個NSDateComponents對象返回兩個提供的日期之間的差”。(來自API文檔)。


創建2個NSDate,其差異是要細分的NSTimeInterval。(如果您的NSTimeInterval來自比較2個NSDate,則無需執行此步驟,甚至不需要NSTimeInterval,只需將日期應用于NSCalendar方法即可)。


從NSDateComponents獲取報價


樣例代碼


// The time interval 

NSTimeInterval theTimeInterval = ...;


// 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

NSCalendarUnit unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;


NSDateComponents *breakdownInfo = [sysCalendar components:unitFlags fromDate:date1  toDate:date2  options:0];

NSLog(@"Break down: %i min : %i hours : %i days : %i months", [breakdownInfo minute], [breakdownInfo hour], [breakdownInfo day], [breakdownInfo month]);


查看完整回答
反對 回復 2019-12-20
?
catspeake

TA貢獻1111條經驗 獲得超0個贊

這段代碼知道夏令時和其他可能令人討厭的事情。


NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *components = [gregorianCalendar components: (NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit )

                                                    fromDate:startDate

                                                      toDate:[NSDate date]

                                                     options:0];



NSLog(@"%ld", [components year]);

NSLog(@"%ld", [components month]);

NSLog(@"%ld", [components day]);

NSLog(@"%ld", [components hour]);

NSLog(@"%ld", [components minute]);

NSLog(@"%ld", [components second]);


查看完整回答
反對 回復 2019-12-20
?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

這對我有用:


    float *lenghInSeconds = 2345.234513;

    NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:lenghInSeconds];

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



    [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];


    [formatter setDateFormat:@"HH:mm:ss"];

    NSLog(@"%@", [formatter stringFromDate:date]); 

    [formatter release];

這里的主要區別是您需要針對時區進行調整。


查看完整回答
反對 回復 2019-12-20
  • 3 回答
  • 0 關注
  • 825 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號