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 分钟。我试过给出更大的数字然后也得到相同的结果
请让我知道对此的想法以及如何解决这个问题
最佳答案
您可能使用的是印度标准时间?
引用日期定义为格林威治标准时间午夜。 IST 为 GMT+5:30。
因此,当您将引用日期增加 20 秒时,您将得到格林威治标准时间午夜过后 20 秒。当您随后创建一个日期格式化程序并且不为其设置任何其他内容时,它将在您设备的自然时区运行。这意味着当您在时间结束时询问分钟和秒数时,您会得到 30 分 20 秒。
NSDate
是绝对时间,是任何时区或日历的抽象。如果五个不同时区的五个设备都同时调用 [NSDate date]
来获取当前时间,它们都会得到具有相同值的对象。
NSDateFormatter
结合了一个 NSDate
与一个 NSCalendar
和一个 NSTimeZone
来确定分钟、秒、小时、月、年等
关于objective-c - 为什么使用 NSDate 将 double 转换为字符串会额外增加 30 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10742078/