5

我执行以下代码片段:

NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]]; 
[comp setDay:1]; 

NSDate *firstDayOfMonthDate = [gregorian dateFromComponents:comp];

firstDayOfMonthDate 的值是 = 30-4-2011 但 excpeted 是 1-5-2011 即我想要任何指定日期的月份的第一个日期。但它给了我上个月的最后一个日期。

提前致谢。

4

1 回答 1

10

添加

[gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

在初始化你的 NSCalendar 之后。

[NSDate date]将返回 UTC 时区的日期,以及自 2001 年 1 月 1 日 00:00 GMT 以来的绝对间隔,但 NSCalendar 将其时区设置为可能不是 UTC 的默认时区。

UTC 与 UTC “相同”,来自维基百科的引用:

在随意使用时,当几分之一秒不重要时,可以认为格林威治标准时间 (GMT) 等同于 UTC 或 UT1。在非正式或随意的环境中使用时,说“GMT”通常意味着 UTC 或 UT1。在技​​术方面,避免使用“GMT”;首选明确的术语“UTC”或“UT1”。 [3]

于 2011-05-07T11:13:22.267 回答