我正在創建一個倒計時器,我需要打印出剩下的時間(小時:分鐘:秒)直到特定日期。我發現如何獲得Now和目標日期之間的時間間隔,但我不知道如何將時間間隔格式化爲字符串。 NSDateFormater在NSTimeInterval上工作嗎?Objective-c格式化時間直到某個日期
0
A
回答
3
你會先比較兩個NSDate的對象檢索兩者之間在幾秒鐘的差別,你應該使用NSDate的方法是
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate
然後,你可以簡單地寫一個函數來解析秒到小時/分鐘/秒,例如,你可以使用這個(未經測試):
-(NSDictionary*)createTimemapForSeconds:(int)seconds{
int hours = floor(seconds/(60 * 60));
float minute_divisor = seconds % (60 * 60);
int minutes = floor(minute_divisor/60);
float seconds_divisor = seconds % 60;
seconds = ceil(seconds_divisor);
NSDictionary * timeMap = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:[NSNumber numberWithInt:hours], [NSNumber numberWithInt:minutes], [NSNumber numberWithInt:seconds], nil] forKeys:[NSArray arrayWithObjects:@"h", @"m", @"s", nil]];
return timeMap;
}
5
NSTimeInterval
以秒爲單位,使用分而其餘打破它與格式(未測試的代碼):
NSString *timeIntervalToString(NSTimeInterval interval)
{
long work = (long)interval; // convert to long, NSTimeInterval is *some* numeric type
long seconds = work % 60; // remainder is seconds
work /= 60; // total number of mins
long minutes = work % 60; // remainder is minutes
long hours = work/60 // number of hours
// now format and return - %ld is long decimal, %02ld is zero-padded two digit long decimal
return [NSString stringWithFormat:@"%ld:%02ld:%02ld", hours, minutes, seconds];
}
2
這是我的項目代碼:
-(NSString*)timeLeftString
{
long seconds = [self msLeft]/1000;
if(seconds == 0)
return @"";
if(seconds < 60)
return [NSString stringWithFormat:
pluralString(seconds,
NSLocalizedString(@"en|%ld second left|%ld seconds left", @"")), seconds];
long minutes = seconds/60;
seconds -= minutes*60;
if(minutes < 60)
return [NSString stringWithFormat:
NSLocalizedString(@"%ld:%02ld left",@""),
minutes, seconds];
long hours = minutes/60;
minutes -= hours*60;
return [NSString stringWithFormat:
NSLocalizedString(@"%ld:%02ld:%02ld left",@""),
hours, minutes, seconds];
}
msLeft
---我的函數,返回以毫秒爲單位 pluralString
時間---我的功能,它提供根據值格式字符串的不同部分(HTTP ://translate.sourceforge.net/wiki/l10n/pluralforms)
函數對不同的定時器值(左1秒,左5秒,左234,左1:15:14)返回不同的格式。
在任何情況下,長期運行過程中的進展不好應該是可見的
還有一個想法:如果那個時候左邊是「小」,可能已經離開的時間應該不會顯示 - (不到一分鐘?) - 只需進度條即可減少界面「視覺噪音」。
相關問題
- 1. 格式化日期時間
- 2. 日期時間格式化
- 3. Symfony2,日期時間與日期和時間一起格式化
- 4. 直到某個工作日或某個日期需要多長時間
- 5. JavaScript日期時間格式化
- 6. Excel日期時間格式化
- 7. 重新格式化日期時間
- 8. 在C#中格式化日期時間#
- 9. 如何格式化日期時間?
- 10. PHP日期時間戳格式化
- 11. 使用Timex格式化日期時間
- 12. 在Javascript中格式化日期時間
- 13. 格式化日期 - 沒有時間?
- 14. 周格式化的日期時間
- 15. 日期時間格式全球變化
- 16. 格式化日期時間後綴
- 17. 格式化日期和時間
- 18. 格式化日期/時間在C#
- 19. jqGrid列日期時間格式化
- 20. 格式化日期時間字段
- 21. 格式化日期和時間在PHP
- 22. 格式化日期/時間在php 4
- 23. ASP.NET MVC3格式化日期時間
- 24. 格式化日期時間對象
- 25. 使用XSLT格式化日期時間
- 26. 格式化日期(YY:MM:DD:時間)在Excel
- 27. 重新格式化日期時間
- 28. 格式化時間和日期數據
- 29. 格式化日期和時間postgresql
- 30. 格式化我的日期時間
感謝分享。你可以發佈你的pluralString函數嗎? – dmclean
這也適用於pluralString。 https://cocoapods.org/?q=TTTLocalizedPluralString – dmclean