iPhone - 计算任何日期的星期几

时间:2011-08-28 23:14:25

标签: iphone

我有一个代表日期的NSDate变量“aDate”,例如,星期日,2011年8月28日。我在NSDate变量上有这个日期。这可以是任何日期,但是当这一天是星期天时会出现问题。

我想获得代表星期几的三个字母的字符串。在这种情况下,SUN。

然后我有了这段代码:

NSDateFormatter* theDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[theDateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
[theDateFormatter setDateFormat:@"EEE"];  
[theDateFormatter setLocale:currentLocale]; // I have tried to comment this out... no change

NSString *dayOfWeek =  [theDateFormatter stringFromDate:aDate];

我的结果是MON。星期一?

如果我添加这段代码,疯狂就会变得更加疯狂:

NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:myDate];
int weekday = [comps weekday];

然后工作日来了2(星期一??????)WTF?确认问题。

我所处的地方理论上星期一是一周的第一天。因此,独立于我的时区,任何日期都只有一周的一天。如果我想计算一周的哪一天是1978年1月1日,我不需要定义任何时区。

我如何在iPhone上执行此操作?

感谢。

2 个答案:

答案 0 :(得分:1)

NSData引用基准日期“2001年1月1日的第一个瞬间GMT”,它只是自该基准日期以来的秒数。

根据定义,日期对位置敏感,因为我写这篇文章,我在英国的朋友已经在明天了。

星期几是日历敏感的。

因此需要指定时区和日历。在我的情况下,默认情况下它们似乎是正确的,但最好明确指定。

所以,设置时区:

- (void)setTimeZone:(NSTimeZone *)tz

答案 1 :(得分:0)

你的时区是什么时候?您可能有一天休息,因为您的时区与商品及服务税的差异很大,因此您所代表的时间是下一天或前一天。

我发现有必要将日期指定为当地时区以避免这种情况。