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

iPhone-计算任何日期的星期几,iphone,Iphone,我有一个NSDate变量“aDate”,它表示一个日期,例如,2011年8月28日星期日。我在NSDate变量上有这个日期。这可以是任何日期,但当这一天是星期日时,问题就会出现 我想获得表示星期几的三个字母字符串。在这种情况下,孙 那么我有这个代码: NSDateFormatter* theDateFormatter = [[[NSDateFormatter alloc] init] autorelease]; [theDateFormatter setFormatterBehavior:NSD

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

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

那么我有这个代码:

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];
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:myDate];
int weekday = [comps weekday];
我得到的结果是MON。星期一

如果我添加以下代码,疯狂会变得更加疯狂:

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];
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:myDate];
int weekday = [comps weekday];
那么工作日是2(星期一)WTF?确认问题

我所在的地区理论上周一是一周的第一天。因此,与我的时区无关,任何日期都只有一周中的一天。如果我想计算1978年1月1日是星期几,我不需要定义任何时区

我如何在iPhone上做到这一点


谢谢。

你的时区是什么?你很可能休息一天,因为你所在的时区与GST有很大的不同,你所代表的时间是下一天或前一天


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

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

根据定义,日期是位置敏感的,正如我写的,我在英国的朋友已经在明天了

星期几与日历相关

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

因此,设置时区:

- (void)setTimeZone:(NSTimeZone *)tz

NSLog您的今日变量。取决于你的位置,今天(现在)已经是星期一了。为什么星期一是一周的第一天对日期很重要?你是如何创建日期的?检查这个问题的第一个答案,@fluchtpunkt-日期是正确的:8月28日,2011@krio:这正是我正在使用的,无助于解决我的问题。谢谢我的时区是格林尼治标准时间,但我们现在是夏季时间,所以我们是+1。我讨厌iOS里的约会。我试图计算一个通用日期的星期几。为什么我必须包括时区?这太愚蠢了。所以,如果我想计算1970年1月1日是星期几,我必须包括一个时区?创建这个的程序员患有严重的精神疾病。我想你没有理解我的意思。如果我问一个了不起的学者2001年12月23日是哪一天。他们会问“星期一”,他们不会问我“哪个时区?”。从这个意义上讲,日期怎么可能是时区敏感的呢。2001年12月23日将是星期一,或者在全世界的某个时间点上是哪一天。2001年12月23日在西方不是星期一,在东方不是星期二。我看你的答案解决了问题。我只是问和咆哮。苹果不得不做出选择,是基于格林尼治标准时间还是本地时区。他们选择了GMT。现在,我发现苹果的日期/日历API很难使用,在我看来,在普通情况下,它可以变得更容易使用,他们选择不这样做。我有一个关于这些API笨拙的bug,请也这样做!我同意。这是如此困难,甚至他们最近也遇到了日历事件没有在正确的日期启动的问题。通用日期不能与任何时区关联。日期是一个日期,在上海或纽约。我正在开发一款及时发布事件的应用程序。我的头发因仇恨而灰白,试图做一些简单的任务,比如比较日期,计算未来和过去的日期,等等。这比需要的复杂得多。他们的日期等于无穷大的平方。我现在将填写一份错误报告。谢谢。考虑看WWDC11会话117,“执行日历计算”,我做了,它帮助。