为什么使用NSDate将double转换为字符串会额外增加30分钟

时间:2012-05-24 17:01:57

标签: objective-c ios xcode nsdate nsdateformatter

double duration = 20; // duration is in seconds 

NSDate* durationDate = [[NSDate alloc]initWithTimeIntervalSinceReferenceDate:duration];

NSDateFormatter *formatter = nil;


formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"mm:ss"];

NSString *durationString=[formatter stringFromDate:durationDate];//here durationString should have 20 

但是我得到了30:20?从这里加入30分钟。我试过给出更大的数字然后同样的结果

请让我知道对此的想法以及如何解决这个问题

1 个答案:

答案 0 :(得分:5)

你可能在印度标准时间?

参考日期定义为格林威治标准时间午夜。 IST是GMT + 5:30。

因此,当您在参考日期添加20秒时,您将获得格林尼治标准时间午夜20秒。当您创建日期格式化程序并且不为其设置任何其他内容时,它将在您设备的自然时区中运行。这意味着当你在30分20秒的时间结束时询问分钟和秒数时。

NSDate是绝对时间,是任何时区或日历的摘要。如果五个不同时区中的五个设备同时调用[NSDate date]来获取当前时间,则他们都会获得具有相同值的对象。

NSDateFormatterNSDateNSCalendarNSTimeZone结合起来,以确定分钟,秒,小时,月,年等。