2009-10-31 19 views
45

Mam datę przekonwertowaną na podwójną wartość i zapisaną w bazie danych. Teraz chcę porównać, jeśli currentDate > myDataBaseDate + 8 godzin tj. Chcę uzyskać 8 godzin dodane do myDataBaseDate. Konwertuję datę na dwie wartości. Jak mogę uzyskać 8 godzin później od daty zapisania bazy danych? Jak mogę porównaćJak dodawać godziny do NSDate?

if (currentDateTime > DateFromdatabaseValue + DateByAdding8HoursInDataBase) 

Odpowiedz

141

Nie jestem do końca pewien, co chce zrobić, ale można utworzyć obiekt NSDate dodając czas w sekundach na inny przy użyciu NSDate:

- (id)dateByAddingTimeInterval:(NSTimeInterval)seconds

// np. dodać 8 godzin do bieżącego czasu:

NSDate *mydate = [NSDate date]; 
NSTimeInterval secondsInEightHours = 8 * 60 * 60; 
NSDate *dateEightHoursAhead = [mydate dateByAddingTimeInterval:secondsInEightHours]; 
+3

Unikaj używania tego rodzaju matematyki daty, jeśli precyzja jest dla ciebie ważna. Nie możesz przyjąć 60 sekund na minutę, ani 60 minut na godzinę. NSCalendar istnieje, aby usunąć wszystkie te narożne przypadki (na przykład sekundy przestępne). –

+0

tnks kolega ... najlepsza odpowiedź znalazłem – Mehul

+0

@BenPackard jakie jest twoje rozwiązanie w takim przypadku? – circuitry

0

Można po prostu dodać 8 * 3600 do wartości bazy danych (przy założeniu, że przerobiony podwójna wartość reprezentuje sekund).

0

NSDate * startdate = datePicker.date;

NSTimeInterval secondsInOneHours = 1 * 60 * 60; 

    NSDate *dateOneHoursAhead = [startdate dateByAddingTimeInterval:secondsInOneHours]; 

    [dateformate setDateFormat:@"d-MMM-yy HH:mm:ss"]; 

    strDate = [dateformate stringFromDate:dateOneHoursAhead]; 
2

można po prostu użyć:

NSDate *incrementedDate = [NSDate dateWithTimeInterval:numberOfSeconds sinceDate:[NSDate date]]; 
12

Od iOS 8 jest bardziej wygodny dateByAddingUnit:

//add 8 hours 
let calendar = NSCalendar.autoupdatingCurrentCalendar() 
newDate = calendar.dateByAddingUnit(.CalendarUnitHour, value: 8, toDate: originalDate, options: nil) 
+3

To powinna być zaakceptowana odpowiedź, dzięki za udzielenie odpowiedzi i komentowanie powyżej. – woody121

0

Swift 3.X Prosta obsługa

let calendar = NSCalendar.autoupdatingCurrent 
let newDate = calendar.date(byAdding: .hour, value: 8, to: Date())