Gil*_*ert 9 string iphone int objective-c
我有以下代码,用于将毫秒转换为小时,分钟和秒:
int hours = floor(rawtime / 3600000);
int mins = floor((rawtime % 3600000) / (1000 * 60));
int secs = floor(((rawtime % 3600000) % (1000 * 60)) / 1000);
NSLog(@"%d:%d:%d", hours, mins, secs);
NSString *hoursStr = [NSString stringWithFormat:@"%d", hours];
NSString *minsStr = [NSString stringWithFormat:@"%d", mins];
NSString *secsStr = [NSString stringWithFormat:@"%d", secs];
NSLog(@"%a:%a:%a", hoursStr, minsStr, secsStr);
Run Code Online (Sandbox Code Playgroud)
非常坦率的.Rawtime是一个值为1200的int.输出如下:
0:0:1
0x1.3eaf003d9573p-962:0x1.7bd2003d3ebp-981:-0x1.26197p-698
Run Code Online (Sandbox Code Playgroud)
为什么将int转换为字符串会产生如此狂野的数字呢?我尝试过使用%i和%u,但没有区别.怎么了?
Car*_*rum 17
您必须%@用作NSString的转换说明符.将您的最后一行更改为:
NSLog(@"%@:%@:%@", hoursStr, minsStr, secsStr);
Run Code Online (Sandbox Code Playgroud)
%a意味着完全不同的东西 从printf() 手册页:
aA
双参数被舍入并在样式中转换为十六进制表示法Run Code Online (Sandbox Code Playgroud)[-]0xh.hhhp[+-]d其中十六进制点字符后面的位数等于精度规格.
您应该使用NSNumberFormatterfor数字或NSDateFormatter日期/时间来代替滚动自己的字符串格式代码.这些数据格式化器负责将格式本地化到用户的语言环境,并处理内置的各种格式.
为了您的使用,您需要将毫秒时间转换为NSTimeInterval(typedef'd from double):
NSTimeInterval time = rawtime/1e3;
Run Code Online (Sandbox Code Playgroud)
现在你可以用a NSDateFormatter来表示时间:
NSDate *timeDate = [NSDate dateWithTimeIntervalSinceReferenceDate:time];
NSString *formattedTime = [NSDateFormatter localizedStringFromDate:timeDate
dateStyle:NSDateFormatterNoStyle
timeStyle:NSDateFormatterMediumStyle];
NSString *rawTime = [[formattedTime componentsSeparatedByString:@" "] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)
在OS X上,最后一行删除"AM/PM".这将适用于少于12小时的任何时间,并将为HH:MM:SS提供本地化格式的格式化字符串.在iPhone上,localizedStringFromDate:dateStyle:timeStyle:尚未推出.可以实现与同样的效果setTimeStyle:,setDateStyle:以及stringFromDate:在日期格式实例.