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

Vin*_*igi 0 xcode objective-c nsdate nsdateformatter ios

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 
Run Code Online (Sandbox Code Playgroud)

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

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

Tom*_*mmy 5

你可能在印度标准时间?

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

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

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

NSDateFormatter结合了NSDate具有NSCalendarNSTimeZone确定分,秒,小时,月,年等.