首先了解下NSDate的初始化:
// 获取当前日期
NSDate *date = [NSDate date];
// 打印结果: 当前时间 date = 2016-06-16 11:00:04 +0000
NSLog(@"当前时间 date = %@",date);
// 获取从某个日期开始往前或者往后多久的日期,此处60代表60秒,如果需要获取之前的,将60改为-60即可
date = [[NSDate alloc] initWithTimeInterval:60 sinceDate:[NSDate date]];
//打印结果:当前时间 往后60s的时间date = 2016-06-16 11:01:04 +0000
NSLog(@"当前时间 往后60s的时间date = %@",date);
注:有可能会出现时区上的问题--跟实际时间相差8小时的问题,遇到这种情况可:
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate: date];
NSDate *localDate = [date dateByAddingTimeInterval: interval];
// 打印结果 正确当前时间
localDate = 2013-08-16 17:01:04 +0000
NSLog(@"正确当前时间 localDate = %@",localDate);
NSDate与NSString的转换
/*---- NSDate与NSString---*/
NSDateFormatter *dateFormatter =[[NSDateFormatter alloc] init];
// 设置日期格式
[dateFormatter setDateFormat:@"年月日 YYYY/mm/dd 时间 hh:mm:ss"];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
// 打印结果:dateString = 年月日 2013/10/16 时间 05:15:43
NSLog(@"dateString = %@",dateString);
// 设置日期格式
[dateFormatter setDateFormat:@"YYYY-MM-dd"];
NSString *year = [dateFormatter stringFromDate:[NSDate date]];
// 打印结果:年月日 year = 2013-08-16
NSLog(@"年月日 year = %@",year);
// 设置时间格式
[dateFormatter setDateFormat:@"hh:mm:ss"];
NSString *time = [dateFormatter stringFromDate:[NSDate date]];
/ / 打印结果:时间 time = 05:15:43
NSLog(@"时间 time = %@",time);
几种常见时间转换的工厂方法:
//根据传入的格式以及时间戳返回对应的时间字符串
+ (NSString *)getStartTimeDate:(double)dateTime format:(NSString *)format{
if (format == nil) {
format = @"yyyy/MM/dd";
}
NSTimeInterval time= dateTime;//因为时差问题要加8小时 == 28800 sec
NSDate *detaildate=[NSDate dateWithTimeIntervalSince1970:time];
//实例化一个NSDateFormatter对象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//设定时间格式,这里可以设置成自己需要的格式 @"yyyy/MM/dd"
[dateFormatter setDateFormat:format];
NSString *currentDateStr = [dateFormatter stringFromDate: detaildate];
return currentDateStr;
}
//返回时间戳 时间字符串转为时间戳,具体时间格式自行设置
+ (NSString *)returnTimestamp:(NSString *)timeStr{
//实例化一个NSDateFormatter对象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//设定时间格式,这里可以设置成自己需要的格式
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *date = [dateFormatter dateFromString:timeStr];
NSTimeInterval timeSp = [date timeIntervalSince1970];
return [NSString stringWithFormat:@"%f",timeSp];
}
/*处理返回应该显示的时间*/ 如xx分钟前 xx小时前 xx天前
+ (NSString *) returnUploadTime:(NSString *)timeStr
{
NSTimeInterval time= [timeStr doubleValue];//因为时差问题要加8小时 == 28800 sec
NSDate *detaildate=[NSDate dateWithTimeIntervalSince1970:time];
//实例化一个NSDateFormatter对象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//设定时间格式,这里可以设置成自己需要的格式
[dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
NSString *currentDateStr = [dateFormatter stringFromDate: detaildate];
NSDate *datenow = [NSDate date];
NSDateFormatter * dm = [[NSDateFormatter alloc]init];
//指定输出的格式 这里格式必须是和上面定义字符串的格式相同,否则输出空
[dm setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
NSDate * newdate = [dm dateFromString:currentDateStr];
long dd = (long)[datenow timeIntervalSince1970] - [newdate timeIntervalSince1970];
NSString *timeString=@"";
if (dd/3600<1)
{
timeString = [NSString stringWithFormat:@"%ld", dd/60];
timeString=[NSString stringWithFormat:@"%@分钟前", timeString];
}
if (dd/3600>1&&dd/86400<1)
{
timeString = [NSString stringWithFormat:@"%ld", dd/3600];
timeString=[NSString stringWithFormat:@"%@小时前", timeString];
}
if (dd/86400>1)
{
timeString = [NSString stringWithFormat:@"%ld", dd/86400];
timeString=[NSString stringWithFormat:@"%@天前", timeString];
}
return timeString;
}