是否有现有的 Objective-C 库来处理对象计数、文件大小、日期、持续时间等的人类可读性?(并且基于 Cocoa 的 Foundation 框架?)
换句话说,给定一个 NSDate、NSNumber、NSTimeInterval 等或一个 NSArray 对象;是否有用于构造字符串表示的库来处理以下问题:
- 计算单数与复数:显示“2 个文件”、“3 个文件”等,但显示“1 个文件”而不是“1 个文件”。
- 日期:显示“昨天”而不是“2010-02-18”,“上周一”而不是“2010-02-15”等等。
- 持续时间:显示“预计剩余时间:大约一个小时”而不是“...:57 分钟”。
- 文件大小:50 字节显示“50 字节”,1073741824 字节显示“1.0 GiB”等等。
这似乎是一个图书馆必然已经存在的常见问题。甚至可能已经是 Apple 提供的标准框架(尽管我无法立即找到任何相关信息)。问题是在哪里?;)
注意:这确实是对dreamlax 答案的评论,但是作为评论发布太长了。
感谢您提供指向 MDC 文章的链接。我确实意识到这可能是一个相当复杂的问题。即使只考虑英语,更不用说多种语言了。
再说一次,这是一个如此复杂的问题,这更是我想要一个可以解决一些问题的库的原因。;)
文件大小确实看起来最简单,但即使这样也很容易出错。考虑以下代码输出作为对本网站上类似问题的回答。第一个代码奇怪地将 1023 字节报告为 1.0 KB。第二个报告 (1024 * 1024) - 1 个字节为 1024.00 KB,而第一个报告为 1.0 MB。根据 Calculator.app,(1024 * 1024) - 1 个字节约为 1.023,9990234375 KB。那么应该显示为“1023,99 KB”、“1024,00 KB”、“1.0 MB”、...?我不确定。
今天早些时候我很快写了一些代码来转换文件大小,然后在我为它编写单元测试时意识到它有类似的问题。
拥有一个已经考虑过这一点的图书馆真的很好......
1022 bytes = 1022 bytes
1023 bytes = 1.0 KB
1024 bytes = 1.0 KB
1025 bytes = 1.0 KB
(1024 * 1024) - 1 bytes = 1.0 MB
(1024 * 1024) bytes = 1.0 MB
(1024 * 1024) + 1 bytes = 1.0 MB
[ 输出来自ObjC/Cocoa 类的代码,用于将大小转换为人类可读的字符串?]
1022 bytes = 1022.00 B
1023 bytes = 1023.00 B
1024 bytes = 1024.00 B
1025 bytes = 1.00 KB
(1024 * 1024) - 1 bytes = 1024.00 KB
(1024 * 1024) bytes = 1024.00 KB
(1024 * 1024) + 1 bytes = 1.00 MB
[ 来自雪豹文件大小的代码输出]
产生上述输出的代码(相当明显,但仅供参考):
NSLog(@"1022 bytes = %@", [self asFileSizeString: [NSNumber numberWithInt: 1022]]);
NSLog(@"1023 bytes = %@", [self asFileSizeString: [NSNumber numberWithInt: 1023]]);
NSLog(@"1024 bytes = %@", [self asFileSizeString: [NSNumber numberWithInt: 1024]]);
NSLog(@"1025 bytes = %@", [self asFileSizeString: [NSNumber numberWithInt: 1025]]);
NSLog(@"(1024 * 1024) - 1 bytes = %@", [self asFileSizeString: [NSNumber numberWithInt: (1024 * 1024) - 1]]);
NSLog(@"(1024 * 1024) bytes = %@", [self asFileSizeString: [NSNumber numberWithInt: (1024 * 1024)]]);
NSLog(@"(1024 * 1024) + 1 bytes = %@", [self asFileSizeString: [NSNumber numberWithInt: (1024 * 1024) + 1]]);