NSDate
//在OC中,Foundation框架为我们提供了强大的时间操作类‘NSDate’,该类封装了各种处理时间和日期的API
//获取系统当前时间(GMT Greenwitch Mean Time 格林尼治标准时间,它与北京时间相差8个小时,北京时间 = GMT时间+8)
NSDate *date1 = [NSDate date];
NSLog(@"%@",date1);
//当前系统时间+100秒
//NSTimeInterval 是一个以秒为单位的时间片,也叫时间戳。
NSDate *date2 = [NSDate dateWithTimeIntervalSinceNow:100];
NSLog(@"%@",date2);
//1970年1月1日+0秒
NSDate *date3 = [NSDate dateWithTimeIntervalSince1970:0];
NSLog(@"%@",date3);
//距离sinceDate日期timeInterval时间的时间
NSDate *date4 = [NSDate dateWithTimeInterval:100 sinceDate:[NSDate date]];
NSLog(@"%@",date4);
//通过时间追加创建NSDate,同样地返回seconds秒后的时间,如果这个seconds为负的话,就是seconds秒前的时间。
NSDate *date5 = [date4 dateByAddingTimeInterval:100];
NSLog(@"%@",date5);
//日期比较
//1.两个日期的时间间隔
//将一个日期转换成时间戳,此日期是以1970年为标准
NSTimeInterval timeInterval1970 = [[NSDate date] timeIntervalSince1970];
NSLog(@"%f",timeInterval1970);
//将一个时间转换为时间戳是以现在为标准的
NSTimeInterval timeIntervalNow = [[NSDate date]timeIntervalSinceNow];
NSLog(@"%f",timeIntervalNow);
//2.日期的早晚比较
NSDate *dateNow = [NSDate date];
NSDate *dateHourAgo = [dateNow dateByAddingTimeInterval:-3600];
//判断两个日期是否相等
BOOL flag = [dateNow isEqualToDate:dateHourAgo];
if (flag) {
NSLog(@"dateNow = dateHourAgo");
}
//判断两个日期的先后返回较早的日期
NSDate *date6 = [dateNow earlierDate:dateHourAgo];
if ([date6 isEqualToDate:dateNow]) {
NSLog(@"较早的时间是:dateNow");
}
else
{
NSLog(@"较早的时间是:dateHourAgo");
}
//判断较晚的日期
NSDate *date7 = [dateNow laterDate:dateHourAgo];
if ([date7 isEqualToDate:dateNow]) {
NSLog(@"较晚的时间是:dateNow");
}
else
{
NSLog(@"较晚的时间是:dateHourAgo");
}
//比较两个日期的早晚也可以使用我们之前学过的compare
NSComparisonResult comparisonResult = [dateNow compare:dateHourAgo];
switch (comparisonResult) {
case NSOrderedAscending:
NSLog(@"dateNow < dateHourAgo");
break;
case NSOrderedSame:
NSLog(@"dateNow = dateHourAgo");
case NSOrderedDescending:
NSLog(@"dateNow > dateHourAgo");
default:
break;
}
/*
NSCalendar
我们通过时间戳NSTimeInterval 创建一个时间很方便,但是不直观,Foundation框架为此提供NSCalendar,NSCalendar由更自然的日期组成,例如日,月,星期等,可以使用NSDateComponents 和 NSCalendar 来创建一个NSDate对象
*/
NSCalendar *currentCalendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc]init];
components.year = 2015;
components.month = 2;
components.day = 10;
components.hour =10;
components.minute = 45;
components.second = 30;
//输出日期的小时-8了
NSDate *date8 = [currentCalendar dateFromComponents:components];
NSLog(@"date8 = %@",date8);
//NSTimeZone
//处理日期和时间经常遇到一个问题就是时区,Foundation框架提供了NSTimeZone来制定地区日历
//列出所有时区
NSArray *array = [NSTimeZone knownTimeZoneNames];
NSLog(@"%@",array);
//可以指定名称参数创建一个时区
NSTimeZone *timeZone1 = [NSTimeZone timeZoneWithName:@"Asia/Tokyo"];
//可以指定时区缩写创建一个时区
NSTimeZone *timeZone2 = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
//如何将我们的NSDate 转换成NSString? NSDateFormatter 默认转黄为本地区时间
NSDateFormatter *dateFormatter = [NSDateFormatter new];
//设置时区(默认时区)
dateFormatter.timeZone = [NSTimeZone systemTimeZone];
//设置时间输出格式
[dateFormatter setDateFormat:@"yyyy年MM月dd日 HH时mm分ss秒"];
NSString *string = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"%@",string);
//将时间的类型的字符串转换成日期
NSString *string1 = @"1970-01-01 08:00:00";
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//这里得到的时间是GMT时间
NSDate *date9 = [dateFormatter dateFromString:string1];
NSLog(@"%@",date9);
NSTimeInterval timeInterval = date9.timeIntervalSinceNow;
NSLog(@"距今已经%f秒了",(-timeInterval/60));
NSLog(@"%f",[[NSDate date] timeIntervalSince1970]);