2013-06-06 8 views
12

chcę wrócić moim dniu obiektów sznurkiem „dziś” i „wczoraj” i datami w Celu C.Please wszystkie komentarze są mile widziane:Wymiana data obiektu z „dziś” i „wczoraj” strun w iPhone

Mam daty z formatem @ "rrrr-MM-dd GG: mm: ss"], a następnie ustalam, czy data jest dzisiaj, czy wczoraj, a jeśli jest, zwraca "(Wczoraj | Dzisiaj | Data)" sformatowany ciąg znaków .

+0

Jeśli data przedwczoraj, co będzie wyjście. Powiedz, czego dokładnie chcesz. –

+0

, jeśli data przed wczoraj musi być wyświetlana sama data.i chcesz zwrócić ciągi z dzisiejszym, wczoraj i samą datą .. – Ananya

Odpowiedz

21

NSDateFormatter może to zrobić. Nie działa to jednak z niestandardowymi formatami daty, ale w większości przypadków, gdy potrzebujesz względnych dat, prezentujesz je użytkownikowi, a przede wszystkim: you should not use hard coded date formats.

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
df.timeStyle = NSDateFormatterMediumStyle; 
df.dateStyle = NSDateFormatterShortStyle; 
df.doesRelativeDateFormatting = YES; // this enables relative dates like yesterday, today, tomorrow... 

NSLog(@"%@", [df stringFromDate:[NSDate dateWithTimeIntervalSinceNow:-48*60*60]]); 
NSLog(@"%@", [df stringFromDate:[NSDate dateWithTimeIntervalSinceNow:-24*60*60]]); 
NSLog(@"%@", [df stringFromDate:[NSDate date]]); 
NSLog(@"%@", [df stringFromDate:[NSDate dateWithTimeIntervalSinceNow:24*60*60]]); 
NSLog(@"%@", [df stringFromDate:[NSDate dateWithTimeIntervalSinceNow:48*60*60]]); 

to wypisze:

2013-06-06 09:13:22.844 x 2[11732:c07] 6/4/13, 9:13:22 AM 
2013-06-06 09:13:22.845 x 2[11732:c07] Yesterday, 9:13:22 AM 
2013-06-06 09:13:22.845 x 2[11732:c07] Today, 9:13:22 AM 
2013-06-06 09:13:22.846 x 2[11732:c07] Tomorrow, 9:13:22 AM 
2013-06-06 09:13:22.846 x 2[11732:c07] 6/8/13, 9:13:22 AM 

Na urządzeniu z niemieckimi lokalizacji będzie to print „Vorgestern” (przedwczoraj) i „Übermorgen” (pojutrze) dla pierwszego i Ostatnia randka.

0
NSDate *todayDate = [NSDate date]; 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init]; 
    [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
    NSString *today = [dateFormat stringFromDate:todayDate]; 
    NSLog(@"today is %@",today); 
    NSDate *yesterdayDate = [todayDate dateByAddingTimeInterval: -86400.0]; 
    NSString *yesterday = [dateFormat stringFromDate:yesterdayDate]; 
    NSLog(@"yesterday was %@",yesterday); 

    NSString *yourDate = [NSString stringWithFormat:@"2013-06-08 12:33:28"]; 

    if ([yourDate isEqualToString:yesterday]) { 

     NSLog(@"yesterday"); 
    } 
    else if ([yourDate isEqualToString:today]) 
    { 
     NSLog(@"today"); 

    } 
    else 
    { 
     NSLog(@"the date is %@",yourDate); 
    } 

1) wyjąć dzisiejszą a wczoraj datę, a następnie porównać datę wpisać i wydrukować odpowiednio

4

Co z NSDateFormatter s setDoesRelativeDateFormatting?

Określa, czy odbiornik używa wyrażeń takich jak "dzisiaj" i "jutro" dla składnika daty.

- (void)setDoesRelativeDateFormatting:(BOOL)b
Ustawianie parametrów b = TAK, aby określić, że odbiornik powinien użyć formatowania datę względną, inaczej NO.

Spójrz: NSDateFormatter class reference

3

Mam nadzieję, że również będzie przydatna dla Ciebie, a także:

NSDate *date = somedate; 
    NSInteger dayDiff = (int)[date timeIntervalSinceNow]/(60*60*24); 
    NSDateComponents *componentsToday = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]]; 
    NSDateComponents *componentsDate = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:somedate]; 
    NSInteger day = [componentsToday day] - [componentsDate day]; 
    if (dayDiff == 0) { 
     NSLog(@"Today"); 
    } else if (dayDiff == -1) { 
     NSLog(@"Yesterday"); 
    } else if(dayDiff > -7 && dayDiff < -1) { 
     NSLog(@"This week"); 
    } else if(dayDiff > -14 && dayDiff <= -7) { 
     NSLog(@"Last week"); 
    } else if(dayDiff >= -60 && dayDiff <= -30) { 
     NSLog(@"Last month"); 
    } else { 
     NSLog(@"A long time ago"); 
    } 
+1

Nie do końca poprawne. Twój kod będzie oznaczał wczoraj dzień 23.00 jako "Dzisiaj", jeśli bieżąca godzina ma miejsce przed 23:00. Prawidłowa definicja "Wczoraj" to czas pomiędzy północą ostatniej nocy a północą poprzedniej nocy. Nie 24 godziny wcześniej. – mahboudz

0
NSTimeInterval interval = [dict[@"deviceTimeStamp"]doubleValue]; // set your intervals 
NSDate *date = [NSDate dateWithTimeIntervalSince1970:interval]; // set your past date or create it using dateWithIntervalSince1970 method 
[formatter setDateFormat:@"hh:mm a"]; 
NSTimeZone *tz = [NSTimeZone defaultTimeZone]; 
NSInteger seconds = [tz secondsFromGMTForDate: date]; 
NSDate *dateee = [NSDate dateWithTimeInterval: seconds sinceDate: date]; 
NSDateComponents *components = [[NSCalendar currentCalendar] components:units fromDate:dateee toDate:[NSDate date] options:0]; 
    if (components.day > 0) 
    { 
     if (components.day > 1){ 
      [formatter setDateFormat:@"MMM dd"]; 
      NSString *dateString = [formatter stringFromDate:date]; 
      NSlog(@"%@",dateString); 
     } 
     else{ 
       NSlog(@"Yesterday"); 
     } 
    } 
    else{ 
       NSlog(@"Today"); 
    } 
2

Wymiana data obiektu z „dziś” i „wczoraj” strun w Swift.

Jeśli chcesz wyświetlić datę z innym formatem, zmień timeStyle i dateStyle według potrzeb.

var df = DateFormatter() 
df.timeStyle = .medium 
df.dateStyle = .short 
df.doesRelativeDateFormatting = true 
// this enables relative dates like yesterday, today, tomorrow... 
print("\(df.string(from: Date(timeIntervalSinceNow: -48 * 60 * 60)))") 
print("\(df.string(from: Date(timeIntervalSinceNow: -24 * 60 * 60)))") 
print("\(df.string(from: Date()))") 
print("\(df.string(from: Date(timeIntervalSinceNow: 24 * 60 * 60)))") 
print("\(df.string(from: Date(timeIntervalSinceNow: 48 * 60 * 60)))") 

Wynik:

6/4/13, 9:13:22 AM 
Yesterday, 9:13:22 AM 
Today, 9:13:22 AM 
Tomorrow, 9:13:22 AM 
6/8/13, 9:13:22 AM 
Powiązane problemy