[英]Difference between two NSDate objects — Result also a NSDate
我有兩個NSDate對象,我想要兩者之間的差異,結果應該再次是一個NSDate對象。 知道怎么做到這一點?
在這里,我試圖解決一個獨特的問題,我必須找出經過的時間,然后本地化經過的時間。 如果我在NSDate對象中有經過的時間,我可以本地化它。 所以想到創建一個NSDate對象,它的時間組件與兩個日期之間的時間間隔相同,這樣我就可以使用NSDateFormatter對它進行本地化。
NSDate
代表一個及時的實例,因此將時間間隔表示為NSDate
沒有意義。 你想要的是NSDateComponents
:
NSDate *dateA;
NSDate *dateB;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay
fromDate:dateA
toDate:dateB
options:0];
NSLog(@"Difference in date components: %i/%i/%i", components.day, components.month, components.year);
如果你從2002年5月5日減去12/12/2001,這將是什么日期? 兩個日期之間的時間距離不能是日期,它總是某種間隔。 您可以使用timeIntervalSinceDate:來計算間隔。
要進行本地化,您可以嘗試以下步驟:
您可以將NSCalendar與dateFromComponents 一起使用:傳入NSDateComponents 。
要將timeInterval分解為NSDateComponents,請查看如何在iPhone上將NSTimeInterval分解為年,月,日,小時,分鍾和秒? 。
最后使用NSDateFormatter和initWithDateFormat:allowNaturalLanguage:來獲取本地化字符串。 日期格式字符串語法顯示不同的占位符。
從NSDate
類引用中,您可以使用實例方法來執行這些操作 -
isEqualToDate:
timeIntervalSinceDate:
您可以使用NSDate
的timeIntervalSinceDate:
計算兩個日期之間的時間間隔,但是將時間間隔表示為日期沒有任何意義。
使用-compare:在NSDate中有一種簡單的方法:
NSDate *dateA = [NSDate dateWithTimeIntervalSinceNow:100];
NSDate *dateB = [NSDate dateWithTimeIntervalSinceNow:200];
NSDate *myDate = [NSDate dateWithTimeIntervalSinceNow:150];
NSArray *dateArray = [NSArray arrayWithObjects:dateA, dateB, myDate, nil];
NSArray *sortedArray = [dateArray sortedArrayUsingSelector:@selector(compare:)];
if ([myDate isEqualToDate:[sortedArray objectAtIndex:1]])
NSLog(@"myDatea between dateA and dateB");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.