簡體   English   中英

兩個NSDate對象之間的差異 - 結果也是一個NSDate

[英]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:來計算間隔。

要進行本地化,您可以嘗試以下步驟:

NSDate類引用中,您可以使用實例方法來執行這些操作 -

  1. 如何比較兩個NSDate變量? Ans: isEqualToDate:
  2. 如何找到兩個NSDate變量之間的差異? Ans: timeIntervalSinceDate:
  3. 如何從NSDate變量獲取分鍾,小時和天的每個單獨值? 鏈接

您可以使用NSDatetimeIntervalSinceDate:計算兩個日期之間的時間間隔,但是將時間間隔表示為日期沒有任何意義。

使用-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM