加星号的为重要内容(^o^)/~
// 迭代器
// 枚举
// 数组的枚举
NSArray *arr = @[@"1",@"2",@"3",@"4",@"5",@"6"];
NSEnumerator *enumerator = [arr objectEnumerator];
NSLog(@"%@", enumerator);
NSString *str = nil;
while (str = [enumerator nextObject]) {
/* code to act on each element as it is returned */
NSLog(@"%@", str);
}
// 字典的枚举
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"2",@"3",@"4", nil];
NSEnumerator *enumer = [dic objectEnumerator];
NSString *str1 = nil;
// 字符串str1内的值 为字典中所有value的值
while (str1 = [enumer nextObject]) {
NSLog(@"%@", str1);
}
// 都是用字符串类型进行打印
// 值对象
// 把基本数据类型转换成对象类型
// Integer -> NSNumber
NSInteger a = 10;
// NSNumber *number = [[NSNumber alloc] initWithInteger:a];
NSNumber *number = [NSNumber numberWithInteger:a];
NSLog(@"%@", number);
// NSNumber -> Integer
NSInteger b = [number integerValue];
NSLog(@"%ld", b);
// NSNumber类型是一种便捷类型,它可以将所有数字类型(整型,浮点型,双浮点型)转换为对象类型,而它本身只是NSValue的一个子类型
// 字面量
NSNumber *num = @10;
// 数组里边放形如@10这样的元素就相当于是NSNumber类型
NSArray *arr1 = @[@"1", @10];
// NSValue
// 把结构体和指针换成对象类型
NSRange range = {2, 5};
// 结构体的.是访问成员变量,对象调用属性是点语法
// NSRange -> NSValue
NSLog(@"%ld", range.length);
NSValue *value = [NSValue valueWithRange:range];
NSLog(@"%@", value);
// 再把对象转换成结构体
NSRange rangeV = [value rangeValue];
// 没懂!!!!!!
// 指针转换为对象
int A = 10;
int *p = &A;
NSValue *pointer = [NSValue valueWithPointer:p];
NSLog(@"%@", pointer);
// 对象转换为指针
int *p1 = [pointer pointerValue];
NSLog(@"%d", p1);
// 文件路径
// 给定一个接口文件<电影清单>,对它进行简单解码
NSString *path = @"/Users/dlios/Desktop/OC7_NSDate/OC7_NSDate/movielist.txt";
// NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
// 转换成NSData对象 Data:数据
NSData *data = [NSData dataWithContentsOfFile:path];
NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
// NSLog(@"%@", dic);
// 如果想遍历数据内容一般定义到数组这层就够了
NSMutableArray *arr = dic[@"result"];
// NSLog(@"%@",arr);
NSDictionary *movieDic = arr[0];
// NSLog(@"%@", movieDic);
NSString *str0 = movieDic[@"movieName"];
NSLog(@"%@", str0);
NSString *movieName = dic[@"result"][10][@"movieName"];
NSLog(@"%@", movieName);
NSString *pic_url = dic[@"result"][9][@"pic_url"];
NSLog(@"%@", pic_url);
NSLog(@"*********");
for (NSInteger i = 0; i < arr.count; i++) {
NSLog(@"%@", arr[i][@"movieName"]);
}
NSLog(@"*********");
for (NSDictionary *dic in arr) {
NSLog(@"%@", dic[@"movieName"]);
}
// 接口文件<活动清单> 路径
NSString *path = @"/Users/dlios/Desktop/OC7_NSDate/OC7_NSDate/activitylist.txt";
// NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
// 转换成NSData对象
NSData *data = [NSData dataWithContentsOfFile:path];
NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSMutableString *str1 = dic[@"events"][2][@"owner"][@"name"];
NSLog(@"%@", str1);
NSMutableString *str2 = dic[@"events"][2][@"end_time"];
NSLog(@"%@", str2);
NSMutableString *str3 = dic[@"events"][2][@"begin_time"];
NSLog(@"%@", str3);
// 三种方式打印出演出时间区间
// 无返回值的(只能打印)
NSLog(@"%@ - %@", str3, [str2 substringFromIndex:11]);
// [str2 insertString:@"20:00:00-" atIndex:10]; // 方法不能用,报错
// 有返回值的(可以修改)
NSString *str0 = [NSString stringWithFormat:@"%@ - %@", str3, [str2 substringFromIndex:11]];
NSLog(@"%@", str0);
// 这种方法也可以, 也是有返回值的
NSMutableString *str00 = [NSMutableString string];
[str00 appendFormat:@"%@ - %@", str3, [str2 substringFromIndex:11]];
NSLog(@"%@", str00);
// 查找接口中有多少key为"category",值为"film"的接口,并输出个数
NSMutableArray *arr = dic[@"events"];
NSInteger count = 0;
for (NSMutableDictionary *dic in arr) {
if ([dic[@"category"] isEqualToString:@"film"]) {
count++;
}
}
NSLog(@"%ld", count);
// NSSet 集合:无序 不能有重复元素 元素必须是对象
NSSet *set = [NSSet setWithObjects:@"1",@"2",@"3",@"4",@"5",@"2", nil];
NSLog(@"%@", set);
NSLog(@"%ld", set.count);
// 返回其中的某一个元素
// 本身有取随机元素的功能,但随机性已经在创建集合的时候就完成了,如果想取其他元素,只能直接在原集合处进行修改
NSLog(@"%@", [set anyObject]);
// 判断里边是否有3 返回BOOL类型
NSLog(@"%d", [set containsObject:@"3"]);
// 可变集合
NSMutableSet *set1 = [[NSMutableSet alloc] initWithObjects:@"1",@"2",@"3",@"4", nil];
NSLog(@"%@", set1);
// 添加元素
[set1 addObject:@"5"];
// 删除
[set1 removeObject:@"3"];
// 用forin进行遍历
for (NSString *temp in set1) {
NSLog(@"%@", temp);
}
// NSDate是一个日期的类
// 这样初始化得到的date对象得到的其实是当前零时区的时间
NSDate *date = [NSDate date];
NSLog(@"%@", date);
// +date获取的时间无论在哪个区,都是打印相对应的零时区的时间
// 获取一下当前所在的时区 TimeZone
NSTimeZone *zone = [NSTimeZone systemTimeZone];
// NSLog(@"%@", zone);
// 获取一下和0时区的时差(相差的秒数)
NSInteger seconds = [zone secondsFromGMTForDate:date];
// NSLog(@"%ld", seconds);
// 通过相差的秒数,能获取到当前时区的时间
NSDate *localDate = [NSDate dateWithTimeIntervalSinceNow:seconds]; // (NSTimeInterval)时间间隔
NSLog(@"%@", localDate);
// 输出明天此时的时间
NSDate *times1 = [NSDate dateWithTimeIntervalSinceNow:24 * 60 * 60 + seconds];
NSLog(@"%@", times1);
// 输出昨天此时的时间
NSDate *times2 = [NSDate dateWithTimeIntervalSinceNow:24 * 60 * 60 * (-1) + seconds];
NSLog(@"%@", times2)
// 小知识^_^
// <#NSString# > <#NSString#> 打印出高亮字符的方法,即代码提示所给内容
// 关于计算机元年
// 最初计算机操作系统是32位,而时间也是用32位表示。32位能表示的最大值是2147483647。另外1年365天的总秒数是31536000,2147483647/31536000 = 68.1,也就是说32位能表示的最长时间是68年,而实际上到2038年01月19日03时14分07秒,便会到达最大时间,过了这个时间点,所有32位操作系统时间便会变为10000000 00000000 00000000 00000000,也就是1901年12月13日20时45分52秒,这样便会出现时间回归的现象,很多软件便会运行异常了。
// 到这里,我想问题的答案已经出来了:因为用32位来表示时间的最大间隔是68年,而最早出现的UNIX操作系统考虑到计算机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始时间),至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决,因为用64位操作系统可以表示到292,277,026,596年12月4日15时30分08秒,相信我们的N代子孙,哪怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后了。
NSDate *times = [NSDate dateWithTimeIntervalSince1970:0];
NSLog(@"%@", times);
NSLog(@"%g", NSTimeIntervalSince1970);
//下面这个打印的是2001年 方便选取时间
NSLog(@"%@", [NSDate dateWithTimeIntervalSince1970:NSTimeIntervalSince1970]);
// 时间间隔
// 对应double类型
// 计算两个时间对象的时间间隔
NSTimeInterval interval = [times1 timeIntervalSinceDate:date];
NSLog(@"%g", interval);
// 给定一个时间点,判断它和现在时间的时差,如果小于60秒打印几乎同时;如果大于一分钟小于一小时,打印相差几分钟;如果大于一小时打印相差几小时
// 如何选取一个固定时间点
// NSDate *times0 = [NSDate dateWithTimeIntervalSince1970:NSTimeIntervalSince1970 + (14 * 365 + 206) * 24 * 3600 + 59600];
// NSLog(@"%@", times0);
NSDate *times0 = [NSDate dateWithTimeIntervalSinceNow:1000 + seconds];
NSLog(@"%@", times0);
// 定义时间间隔变量储存时差
NSTimeInterval interval0 = [localDate timeIntervalSinceDate:times0];
NSLog(@"%g", interval0);
// 如果时差为负则转为正数
if (interval0 < 0) {
interval0 = -interval0;
}
NSLog(@"%g", interval0);
if (interval0 <= 60) {
NSLog(@"几乎同时");
} else if (interval0 >= 60 && interval0 <= 3600) {
NSLog(@"相差%g分钟", interval0 / 60);
} else {
NSLog(@"相差%g小时", interval0 / 3600);
}
// 这里打印的全为浮点型
// 日期和字符串互相转换
// NSDate -> NSString
// 1.
NSDate *date1 = [NSDate date];
// stringWithFormat 最好用的方法 可以把任何类型转换为字符串类型
NSString *dateStr = [NSString stringWithFormat:@"%@", date1];
NSLog(@"%@", dateStr);
// 2.
// NSDateFormatter 时间格式 标准格式 不能乱改
// yyyy-MM-dd
// HH:mm:ss 或者 hh-mm-ss
// 这里边HH代表24进制 hh代表12小时进制 转化的时候一定要注意
// 先设置一下时间的格式,要转换的时间要和格式相吻合
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSLog(@"%@", formatter);
NSDate *date2 = [NSDate date];
// 通过格式,把制定的时间直接转换成NSString
// 通过这种方式,系统还会把时间切换成当前所在时区的时间
NSString *strDate = [formatter stringFromDate:date2];
NSLog(@"%@", strDate);
// 字符串 -> NSDate
NSString *timeStr = @"2015-7-23 17:18:10";
// 这里通过时间格式将字符串转换为时间类型的时候 会自动将标准格式的字符串所对应的时间切换成零时区的时间
NSDate *date3 = [formatter dateFromString:timeStr];
// 前方再次出现高能...
// NSDate *date0 = [NSDate date];
// NSTimeZone *zone0 = [NSTimeZone systemTimeZone];
// NSInteger seconds0 = [zone0 secondsFromGMTForDate:date0];
// NSDate *dateNow = [NSDate dateWithTimeIntervalSinceNow:seconds0];
// NSTimeInterval TimeInterval = [dateNow timeIntervalSinceDate:date0];
// NSLog(@"%g", TimeInterval);
// date3 = [NSDate dateWithTimeInterval:TimeInterval sinceDate:date3];
// 任意给定一个固定时间,我想输出这个时间就这么难吗!!!
NSLog(@"%@", date3);