1. 程式人生 > >判斷NSDate是昨天,今天,星期幾等

判斷NSDate是昨天,今天,星期幾等

-(NSString *)compareDate:(NSDate *)date{
  //一:
   NSCalendar *cal = [NSCalendar currentCalendar];
    NSDateComponents *components = [cal components:(NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:[NSDate date]];
    NSDate *today = [cal dateFromComponents:components];
    components = [cal components:(NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:date];
    NSDate *otherDate = [cal dateFromComponents:components];
    if([today isEqualToDate:otherDate]) {
        return @"今天";
    }

    //二;
    NSDate * today = [NSDate date];
    NSDate * yesterday = [NSDate dateWithTimeIntervalSinceNow:-86400];
    NSDate * refDate = date;
    
    // 10 first characters of description is the calendar date:
    NSString * todayString = [[today description] substringToIndex:10];
    NSString * yesterdayString = [[yesterday description] substringToIndex:10];
    NSString * refDateString = [[refDate description] substringToIndex:10];
    
    if ([refDateString isEqualToString:todayString])
    {
        return @"今天";
    } else if ([refDateString isEqualToString:yesterdayString])
    {
        return @"昨天";
    }
    else
    {
        return [self formatDate:date];
    }


}

-(NSString *)formatDate:(NSDate *)date{
    NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    //[formatter setDateFormat:@"MM-dd    HH:mm"];
    NSString* str = [formatter stringFromDate:date];
    return str;

}

另一種方法也可以:

-(NSString *)getStringWithDate:(NSDate *)date{

    NSTimeInterval secondsPerDay = 24 * 60 * 60;

    NSDate *today = [[NSDatealloc]init];

    NSDate *tomorrow, *yesterday;

    tomorrow = [today dateByAddingTimeInterval: secondsPerDay];

    yesterday = [today dateByAddingTimeInterval

: -secondsPerDay];

// 10 first characters of description is the calendar date:

    NSString * todayString = [[today description] substringToIndex:10];

    NSString * yesterdayString = [[yesterday description] substringToIndex:10];

    NSString * tomorrowString = [[tomorrow description] substringToIndex

:10];

NSString * dateString = [[datedescription]substringToIndex:10];

    if ([dateString isEqualToString:todayString])

    {

        return @"今天";

    } else if ([dateStringisEqualToString:yesterdayString])

    {

        return @"昨天";

    }else if ([dateStringisEqualToString:tomorrowString])

    {

        return @"明天";

    }

    else

    {

        return dateString;

    }

}

判斷星期幾
- (NSString*)weekdayStringFromDate:(NSDate*)inputDate {

    NSArray *weekdays = [NSArray arrayWithObjects: [NSNull null], @"星期天", @"星期一", @"星期二", @"星期三", @"星期四", @"星期五", @"星期六", nil];

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:@"Asia/Shanghai"];

    [calendar setTimeZone: timeZone];

    NSCalendarUnit calendarUnit = NSCalendarUnitWeekday;

    NSDateComponents *theComponents = [calendar components:calendarUnit fromDate:inputDate];

    return [weekdays objectAtIndex:theComponents.weekday];

}
判斷農曆
-(NSString*)getChineseCalendarWithDate:(NSDate *)date{

    NSArray *chineseYears = [NSArray arrayWithObjects:
                             @"甲子", @"乙丑", @"丙寅", @"丁卯",  @"戊辰",  @"己巳",  @"庚午",  @"辛未",  @"壬申",  @"癸酉",
                             @"甲戌",   @"乙亥",  @"丙子",  @"丁丑", @"戊寅",   @"己卯",  @"庚辰",  @"辛己",  @"壬午",  @"癸未",
                             @"甲申",   @"乙酉",  @"丙戌",  @"丁亥",  @"戊子",  @"己丑",  @"庚寅",  @"辛卯",  @"壬辰",  @"癸巳",
                             @"甲午",   @"乙未",  @"丙申",  @"丁酉",  @"戊戌",  @"己亥",  @"庚子",  @"辛丑",  @"壬寅",  @"癸丑",
                             @"甲辰",   @"乙巳",  @"丙午",  @"丁未",  @"戊申",  @"己酉",  @"庚戌",  @"辛亥",  @"壬子",  @"癸丑",
                             @"甲寅",   @"乙卯",  @"丙辰",  @"丁巳",  @"戊午",  @"己未",  @"庚申",  @"辛酉",  @"壬戌",  @"癸亥", nil];

    NSArray *chineseMonths=[NSArray arrayWithObjects:
                            @"正月", @"二月", @"三月", @"四月", @"五月", @"六月", @"七月", @"八月",
                            @"九月", @"十月", @"冬月", @"臘月", nil];


    NSArray *chineseDays=[NSArray arrayWithObjects:
                          @"初一", @"初二", @"初三", @"初四", @"初五", @"初六", @"初七", @"初八", @"初九", @"初十",
                          @"十一", @"十二", @"十三", @"十四", @"十五", @"十六", @"十七", @"十八", @"十九", @"二十",
                          @"廿一", @"廿二", @"廿三", @"廿四", @"廿五", @"廿六", @"廿七", @"廿八", @"廿九", @"三十",  nil];


    NSCalendar *localeCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];

    unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth |  NSCalendarUnitDay;

    NSDateComponents *localeComp = [localeCalendar components:unitFlags fromDate:date];

    NSLog(@"%zd_%zd_%zd",localeComp.year,localeComp.month,localeComp.day);

    NSString *y_str = [chineseYears objectAtIndex:localeComp.year-1];
    NSString *m_str = [chineseMonths objectAtIndex:localeComp.month-1];
    NSString *d_str = [chineseDays objectAtIndex:localeComp.day-1];

    NSString *chineseCal_str =[NSString stringWithFormat: @"%@_%@_%@",y_str,m_str,d_str];

    return chineseCal_str;  
}

文章總結:  

NSDate *dateNow;

    dateNow=[NSDatedateWithTimeIntervalSinceNow: 0*24*60*60];//dayDelay代表向後推幾天,如果是0則代表是今天,如果是1就代表向後推24小時,如果想向後推12小時,就可以改成dayDelay*12*60*60,dayDelay1

NSCalendar *calendar = [[NSCalendaralloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];//設定成中國陽曆

NSDateComponents *comps = [[NSDateComponentsalloc] init];

NSCalendarUnit unitFlags =  NSCalendarUnitYear |NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;

//這句我也不明白具體時用來做什麼。。。

    comps = [calendar components:unitFlags fromDate:dateNow];

    long weekNumber = [comps weekday]; //獲取星期對應的長整形字串

    long day=[comps day];//獲取日期對應的長整形字串

    long year=[comps year];//獲取年對應的長整形字串

    long month=[comps month];//獲取月對應的長整形字串

    long hour=[comps hour];//獲取小時對應的長整形字串

    long minute=[comps minute];//獲取月對應的長整形字串

    long second=[comps second];//獲取秒對應的長整形字串

    NSLog(@"%ld-%ld-%ld日,%ld-%ld-%ld",year,month,day,hour,minute,second);

    NSLog(@"%ld",weekNumber);

NSString *riQi =[NSStringstringWithFormat:@"%ld",day];//把日期長整形轉成對應的漢字字串

    switch (weekNumber) {

        case 1:

            weekDay=@"星期日";

            break;

        case 2:

            weekDay=@"星期一";

            break;

        case 3:

            weekDay=@"星期二";

            break;

        case 4:

            weekDay=@"星期三";

            break;

        case 5:

            weekDay=@"星期四";

            break;

        case 6:

            weekDay=@"星期五";

            break;

        case 7:

            weekDay=@"星期六";

            break;

        default:

            break;

    }