1. 程式人生 > >iOS 開發中關於時間顯示問題(今天/昨天/前天/星期幾/具體日期)

iOS 開發中關於時間顯示問題(今天/昨天/前天/星期幾/具體日期)

開發中關於時間顯示問題(今天/昨天/前天/星期幾/具體日期)

以今天為基準,顯示 今天/昨天/前天(昨天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