我有一个代表日期的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上执行此操作?
感谢。
答案 0 :(得分:1)
NSData引用基准日期“2001年1月1日的第一个瞬间GMT”,它只是自该基准日期以来的秒数。
根据定义,日期对位置敏感,因为我写这篇文章,我在英国的朋友已经在明天了。
星期几是日历敏感的。
因此需要指定时区和日历。在我的情况下,默认情况下它们似乎是正确的,但最好明确指定。
所以,设置时区:
- (void)setTimeZone:(NSTimeZone *)tz
答案 1 :(得分:0)
你的时区是什么时候?您可能有一天休息,因为您的时区与商品及服务税的差异很大,因此您所代表的时间是下一天或前一天。
我发现有必要将日期指定为当地时区以避免这种情况。