2011-02-25 57 views
1

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

秒数显示1-60不是00-59,小时数是24小时格式不是12.有什么方法可以对它们进行不同的格式化吗?

现在我已经获得了作为NSInteger的值,将它们转换为NSString并将字符串应用于UILabel。谁能帮忙?

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

回答

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

+0

感谢很多的文档找到所有的格式规范(除了%@的对象)。我觉得有一个快速的狐狸,我不知道最好的方法。在“%02d”中,是否有一个地方可以放置或解释所有这些不同的格式?但是你又一次帮助我。 – HenryGale 2011-02-25 18:10:58

+0

在'printf' – CRD 2011-02-25 18:16:58

+0

ow的手册页上,你已经提出了这个问题。对不起,我只是分开。谢谢 – HenryGale 2011-02-25 18:23:41

0

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

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

我希望这有助于! N

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是整数的正确格式,我相信%@是其他字符串的正确格式。

希望这会有所帮助。

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]; 

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