iOS 开发中关于时间显示问题(今天/昨天/前天/星期几/具体日期)

来源:互联网 发布:js undefined判断 编辑:程序博客网 时间:2024/05/18 01:08

开发中关于时间显示问题(今天/昨天/前天/星期几/具体日期)

以今天为基准,显示 今天/昨天/前天(昨天12:12)
离今天一周之内的显示 星期几(星期四)
离今天一周之外的显示 具体日期(15-09-05 12:33)

为了直观方便,直接上代码,有注释。(都写在ViewController中,需要的自己可以将方法拿出去封装到工具类中)

//  ViewController.m//  Test////  Created by chenqianfeng on 15/9/15.//  Copyright (c) 2015年 chenqianfeng. All rights reserved.//#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    NSLog(@"%@",[self format:@"2015年09月1日 12时12分12秒"]);    NSLog(@"%@",[self format:@"2015年09月10日 12时12分12秒"]);    NSLog(@"%@",[self format:@"2015年09月14日 12时12分12秒"]);}- (NSString *)format:(NSString *)string{    NSDateFormatter *inputFormatter= [[NSDateFormatter alloc] init];    [inputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] ];    [inputFormatter setDateFormat:@"yyyy年MM月dd日 HH时mm分ss秒"];    NSDate*inputDate = [inputFormatter dateFromString:string];    NSDateFormatter *outputFormatter= [[NSDateFormatter alloc] init];    [outputFormatter setLocale:[NSLocale currentLocale]];    [outputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];    //get date str    NSString *str= [outputFormatter stringFromDate:inputDate];    //str to nsdate    NSDate *strDate = [outputFormatter dateFromString:str];    //修正8小时的差时    NSTimeZone *zone = [NSTimeZone systemTimeZone];    NSInteger interval = [zone secondsFromGMTForDate: strDate];    NSDate *endDate = [strDate  dateByAddingTimeInterval: interval];    //NSLog(@"endDate:%@",endDate);    NSString *lastTime = [self compareDate:endDate];//    NSLog(@"lastTime = %@",lastTime);    return lastTime;}-(NSString *)compareDate:(NSDate *)date{    NSTimeInterval secondsPerDay = 24 * 60 * 60;    //修正8小时之差    NSDate *date1 = [NSDate date];    NSTimeZone *zone = [NSTimeZone systemTimeZone];    NSInteger interval = [zone secondsFromGMTForDate: date1];    NSDate *localeDate = [date1  dateByAddingTimeInterval: interval];    //NSLog(@"nowdate=%@\nolddate = %@",localeDate,date);    NSDate *today = localeDate;    NSDate *yesterday,*beforeOfYesterday;    //今年    NSString *toYears;    toYears = [[today description] substringToIndex:4];    yesterday = [today dateByAddingTimeInterval: -secondsPerDay];    beforeOfYesterday = [yesterday dateByAddingTimeInterval: -secondsPerDay];    // 10 first characters of description is the calendar date:    NSString *todayString = [[today description] substringToIndex:10];    NSString *yesterdayString = [[yesterday description] substringToIndex:10];    NSString *beforeOfYesterdayString = [[beforeOfYesterday description] substringToIndex:10];    NSString *dateString = [[date description] substringToIndex:10];    NSString *dateYears = [[date description] substringToIndex:4];    NSString *dateContent;    if ([dateYears isEqualToString:toYears]) {//同一年        //今 昨 前天的时间        NSString *time = [[date description] substringWithRange:(NSRange){11,5}];        //其他时间格式:15-09-01 12:12        NSString *time2 = [[date description] substringWithRange:(NSRange){2,14}];        if ([dateString isEqualToString:todayString]){            dateContent = [NSString stringWithFormat:@"今天%@",time];            return dateContent;        } else if ([dateString isEqualToString:yesterdayString]){            dateContent = [NSString stringWithFormat:@"昨天%@",time];            return dateContent;        }else if ([dateString isEqualToString:beforeOfYesterdayString]){            dateContent = [NSString stringWithFormat:@"前天%@",time];            return dateContent;        }else{            if ([self compareDateFromeWorkTimeToNow:[[date description] substringWithRange:(NSRange){5,11}]]) {                //一周之内除了今天昨天前天之外显示星期                return [[self class]weekdayStringFromDate:date];            }else{                //一周之外的显示日期                return time2;            }        }    }else{        return dateString;    }}//传入时间字符与今天比较是否在一周之内- (BOOL)compareDateFromeWorkTimeToNow:(NSString *)timeStr{    NSString *todayStr = [self dateTransformToTimeString];    int today = [todayStr substringWithRange:(NSRange){3,2}].intValue;    int workTime = [timeStr substringWithRange:(NSRange){3,2}].intValue;    if ([[timeStr substringToIndex:2] isEqualToString:[todayStr substringToIndex:2]]) {        if (today - workTime <= 6) {            return YES;        }else{            return NO;        }    }else{        return NO;    }}//获得当前时间并且转为字符串(截取后的)- (NSString *)dateTransformToTimeString{    //获得当前时间 2014-07-16 07:54:36 +0000(NSDate类)    NSDate *currentDate = [NSDate date];    //转为字符串    NSDateFormatter*df = [[NSDateFormatter alloc]init];//实例化时间格式类    [df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];//格式化    //2014-07-16 07:54:36(NSString类)    NSString *timeString = [df stringFromDate:currentDate];    timeString = [timeString substringFromIndex:5];    return timeString;}//传入时间返回星期几+ (NSString*)weekdayStringFromDate:(NSDate*)inputDate{    NSArray *weekdays = [NSArray arrayWithObjects: [NSNull null], @"星期日", @"星期一", @"星期二", @"星期三", @"星期四", @"星期五", @"星期六", nil];    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];    NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:@"Asia/Shanghai"];    [calendar setTimeZone: timeZone];    NSCalendarUnit calendarUnit = NSWeekdayCalendarUnit;    NSDateComponents *theComponents = [calendar components:calendarUnit fromDate:inputDate];    return [weekdays objectAtIndex:theComponents.weekday];}@end

0 0
原创粉丝点击