NSDateComponents格式化问题

时间:2011-02-25 16:48:35

标签: iphone objective-c ios

我正在使用多个NSDateComponents来显示一个时钟,其各个值在整个屏幕中被分解,但我遇到格式化问题。

秒显示1-60不是00-59,小时是24小时格式而不是12.有没有办法以不同方式格式化这些?

现在我已经将值作为NSInteger传递,将它们转移到NSString并将字符串应用到UILabel。有人可以帮忙吗?

我应该使用@"%"格式吗? (现在我正在使用@"d")如果是这样,我在哪里可以找到这些不同类型的列表?

4 个答案:

答案 0 :(得分:2)

由于您已将值设为NSInteger,因此假设它们首先被称为minuteshours

minutes -= 1; // convert 1 -> 60 to 0 -> 59
if(hours > 12) hours -= 12; // convert 13 -> 24 to 1 -> 12

现在格式化它们都使用"%02d" - 分解为0 - 零填充,2 - 字段宽度,d - 十进制整数。

您可以在printf

上查找文档,找到所有格式规范(除了对象的%@)

答案 1 :(得分:0)

您可以使用NSDateFormatter将日期和时间格式化为NSStrings。

NSDate *date = [dateFormatter dateFromString:@"01.02.1989"];
NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
// Convert my date object into yyyy-mm-dd string object
[dateFormatter1 setDateFormat:@"yyyy-MM-dd"];
NSString *formattedStringDate = [dateFormatter1 stringFromDate:date];

此处有一个日期/时间格式代码列表:Date formatting

我希望这有帮助! Ñ

答案 2 :(得分:0)

我之前遇到过类似的问题,请尝试查看此链接。它列出了所有各种日期格式化程序及其工作方式。 http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

对于你的特殊问题,我想你想要h:mm:ss a。 h给出小时,mm为分钟,ss为秒(可能s可能是0填充,我不确定),a给出AM / PM格式。 另外,%d是整数的正确格式,我相信%@是其他字符串的正确格式。

希望这有帮助。

答案 3 :(得分:0)

通过NSCalendar将NSDateComponents转换为NSDate,然后使用NSDateFormatter(如果需要,可以每个片段使用一个日期格式化器):

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [calendar dateFromComponents:yourDateComponents];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterNoStyle];
[formatter setTimeStye:NSDateFormatterLongStyle];
NSString *timeString = [formatter stringFromDate:date];
[formatter release];

请注意,这将使用用户的时间格式;请参阅使用自定义格式的文档。