【问题标题】:Determining Day Components of an NSDate Object (Time Zone Issues)确定 NSDate 对象的日组件(时区问题)
【发布时间】:2011-08-14 01:32:44
【问题描述】:

我如何才能确定某个 NSDate 对象是否在某天之内?例如,由于所有日期都计算为 GMT 时区,因此日期实际上可能是 8 号而不是 9 号。在计算天数、月份、星期几等时,考虑时区差异的最佳方法是什么?

【问题讨论】:

  • 我刚去 Stackoverflow 上问了这个问题,然后我在首页看到了它……!
  • 时区帐户是什么意思? NSDate 表示时间的有限时刻。请举例说明您将尝试做什么以及潜在的问题是什么。

标签: objective-c timezone nsdate


【解决方案1】:

NSDate 是一个绝对时间点。当您想知道它是哪一天时,您必须考虑您的特定时区。由于您获得了带有NSCalendarNSDateComponents,因此您可以在日历上使用setTimeZone: 来获取您感兴趣的时区的组件(月、日、小时等)。

如果您处理“日历日期”(即应始终代表特定日期/月份而不是绝对时间点的日期),您始终可以使用固定时区(例如 GMT)来显示日期。 NSDateFormatter(用于向用户显示日期)还有一个 timeZone 属性。

【讨论】:

    【解决方案2】:

    您需要在NSCalendar 中设置所需的时区,然后才能使用它将日期分成几部分:

    NSCalendar* gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
    [gregorian setTimeZone:[NSTimeZone localTimeZone]]; // or timeZoneWithName:@"GMT" etc.
    
    unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
    NSDateComponents* compsDate = [gregorian components:unitFlags fromDate:date];
    // [compsDate year] [compsDate month] [compsDate day] 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多