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

标签 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 分钟。我试过给出更大的数字然后也得到相同的结果

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

最佳答案

您可能使用的是印度标准时间?

引用日期定义为格林威治标准时间午夜。 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/

相关文章:

objective-c - 将数字格式化为百分比

objective-c - 如何通过选择器方法传递 int 值?

ios - 在模拟等待时关闭键盘

ios - 如何允许用户在我的应用程序中使用他们保存的照片作为背景?

ios - {FlashDevelop} 使用 AIR 和 FlashDevelop 构建 iOS

ios - XCode IOS 模拟器不会将我的任务置于后台

ios - 如何播放用户本地音乐库中的歌曲?

xcode - 未找到更新错误的对象 Parse Swift

ios - 如何确保在访问核心数据模型之前已进行所有网络调用?

c# - 调用 method_getImplementation 在设备上抛出 ExecutionEngineException