【问题标题】:why conversion of double to string using NSDate adds extra 30 min为什么使用 NSDate 将双精度转换为字符串会增加 30 分钟
【发布时间】:2012-05-24 17:01:56
【问题描述】:
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 分钟。我试过给出更大的数字,结果也一样

请告诉我对此的想法以及如何解决此问题

【问题讨论】:

  • NSDateFormatter 并不是真的打算格式化原始时间值。它正在尝试将其格式化为时间戳,而您住在印度,该时区位于半小时边界上。
  • 听起来您使用的是印度标准时间。

标签: objective-c ios xcode nsdate nsdateformatter


【解决方案1】:

您可能是印度标准时间?

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

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

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

NSDateFormatterNSDateNSCalendarNSTimeZone 组合在一起来确定分钟、秒、小时、月、年等。

【讨论】:

  • 我该如何解决这个问题,我是否需要尝试一些其他机制来将秒数转换为字符串???
  • 如果您只想打印数字而不关心它是秒,请使用标准的NSString+stringWithFormat: 格式代码或NSNumberFormatter。如果您确实确实想使用NSDateFormatter,那么也许可以将您的日期格式化程序上的时区明确设置为 GMT?
猜你喜欢
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多