首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带时区的两个NSDate日期之间的天数

带时区的两个NSDate日期之间的天数
EN

Stack Overflow用户
提问于 2012-09-01 23:10:09
回答 2查看 232关注 0票数 1

我计算两个日期之间的天数:

代码语言:javascript
运行
复制
NSDateComponents *datesDiff = [calendar components: NSDayCalendarUnit 
                                          fromDate: someDate
                                            toDate: currentDate
                                           options: 0];

但是这种方法有一个缺点--它没有考虑时区。例如,如果我在+2格林尼治时间,当地时间是凌晨1:00,目前的日期是昨天。

如何比较指定时区中的日期(没有“黑客”)?

PS:用时间差的计算来阻止答案,我需要实际天数的差异:

  • yesterday 23:00today 1:00 - 1 day
  • yesterday 1:00today 23:00 - 1 day
  • today 1:00today 23:00 - 0 days
  • (所有这些都在当前时区)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-11 05:46:36

我不知道它是否满足了您不讨厌的标准,但一个相当简单的方法似乎是定义GMT调整的日期,如下所示:

代码语言:javascript
运行
复制
NSDate *newDate = [oldDate dateByAddingTimeInterval:(-[[NSTimeZone localTimeZone] secondsFromGMT])

有关更多详细信息,请参阅this question

票数 0
EN

Stack Overflow用户

发布于 2012-09-10 20:34:32

为什么不将日期格式化程序配置为默认GMT时间的所有日期,然后进行比较。

代码语言:javascript
运行
复制
    NSDate *now = [NSDate date]; 
    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"GMT"]; // Sets to GMT time. 

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setCalendar:gregorianCalendar]; 
    [formatter setTimeZone:timeZone]; 
    [formatter setDateFormat:@"yyyyMMddHH"];

    NSString *dateString = [formatter stringFromDate:now]; 
  // do whatever with the dates
    [gregorianCalendar release]; 
    [formatter release];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12232160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档