【问题标题】:Obtain yesterday with NSDate in objective-c在objective-c中使用NSDate获取昨天
【发布时间】:2011-11-15 11:08:20
【问题描述】:

我需要使用 NSDate 对象获取昨天的日期。 有什么想法吗?

编辑:已解决:

NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-86400];

【问题讨论】:

标签: objective-c cocoa-touch nsdate


【解决方案1】:

试试这个代码。通过这种方式,您可以获得 next days, next months, previous days , previous months..

NSDate *now = [NSDate date];
int daysToAdd = -1;  

// set up date components
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setDay:daysToAdd];

// create a calendar
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];

NSDate *yesterday = [gregorian dateByAddingComponents:components toDate:now options:0];
NSLog(@"Yesterday: %@", yesterday);
[gregorian release];

【讨论】:

  • +1 这是一个更好的答案。如果今天或昨天是当地时间从夏令时更改为标准时间(反之亦然)的日期,则添加或减去 86400 秒可能会给出错误答案,具体取决于您执行该操作的时间。
【解决方案2】:
NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow: -(60.0f*60.0f*24.0f)];

编辑:此解决方案不正确。请参阅 Aadhiras 的答案以获得正确的解决方案。

【讨论】:

  • NSTimeInterval 是一个 double,所以你可以去掉 f。尽管编译器很可能也会为您执行此操作。
  • 当我不需要精度时,我喜欢告诉编译器 float 就足够了,因为据我所知,iPhone 处理器的处理能力不如 float。
  • 取决于一代,但编译器很可能会解决已经固定到位的方程,即使它没有三次乘法也不那么昂贵!有更好的地方进行微优化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
  • 2010-12-25
  • 2011-06-12
  • 2011-08-30
  • 1970-01-01
  • 2017-01-14
相关资源
最近更新 更多