今天学习NSDate , 首先我们先了解一下下面几个概念
- 时间戳 : 计算机元年(1970年1月1日) 距离当前时间的总秒数,服务器给时间时(如截止日期),最好给时间戳比较好处理
- 日期解析器 : 将日期按照某种格式输出
- 默认时区 : 格林威治标准时间GMT
1. 当前时间的获取
打印currentDate时加入不同语言,打印结果不一样.当直接打印currentDate和加入英文字符时,打印的时间跟我们当前时区时间是一致的,但是当打印时加入中文或其他语言时,打印的却是零时区的时间
I don't know why , can you help me ?
NSDate *currentDate = [NSDate date];
NSLog(@"%@",currentDate); //Thu Jul 12 14:07:12 2018
NSLog(@"English %@",currentDate); // English Thu Jul 12 14:07:12 2018
NSLog(@"我是中文 %@",currentDate); //我是中文 2018-07-12 06:07:12 +0000
NSLog(@"私は日本語です %@",currentDate);//私は日本語です 2018-07-12 06:07:12 +0000
2. 自定义格式打印日期
- 创建日期解析器
NSDateFormatter *dateFormatter = [NSDateFormatter new];
- 设置时区
dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"Dongguan"];
- 设置日期格式
//2018年07月12日 14:23:01
dateFormatter.dateFormat = @"yyyy年MM月dd日 HH:mm:ss";
NSString *dateStr = [dateFormatter stringFromDate:currentDate];
NSLog(@"%@",dateStr);
//07-12 14:23:01
dateFormatter.dateFormat = @"MM-dd HH:mm:ss";
NSString *dateStr = [dateFormatter stringFromDate:currentDate];
NSLog(@"%@",dateStr);
2. 把字符串转成NSDate
NSDate *distanceDate = [dateFormatter dateFromString:@"2018年07月01日 00:00:11"];
NSLog(@"%@",distanceDate); //Sun Jul 1 00:00:11 2018
if(distanceDate){
//计算两个时间相差的总秒数
NSInteger seconds = [currentDate timeIntervalSinceDate:distanceDate];
NSLog(@"%ld",seconds); //1002343
NSInteger seconds1 = [distanceDate timeIntervalSinceNow];
NSLog(@"%ld",seconds1); // -1002343
NSInteger seconds2 = [distanceDate timeIntervalSince1970];
NSLog(@"%ld",seconds2); // 1530374411
}
网友评论