我正在 Xcode 中编写一个类别,它将扩展当前的 NSDate 类。我想添加两种我经常使用的方法,但不知何故我无法让它们正常工作。
目前我有这个代码:
+ (NSDate*) today
{
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *todayComponents = [gregorian components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]];
NSInteger theDay = [todayComponents day];
NSInteger theMonth = [todayComponents month];
NSInteger theYear = [todayComponents year];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:theDay];
[components setMonth:theMonth];
[components setYear:theYear];
NSDate* todayDate = [gregorian dateFromComponents:components];
[components release];
[gregorian release];
return todayDate;
}
我希望它返回这样的日期:“2010-11-03 00:00:00 +01”。但不知何故,时区一直困扰着我,因为此代码返回“2010-11-02 23:00:00 +0000”。
谁能告诉我如何修复此代码以实际返回正确的日期?或者我可以只使用这个日期,我的应用程序会根据机器设置的时区自行转换它。
我必须将应用程序中的某些事件记录到数据库中,该数据库也只使用 [NSDate date] 方法。这是否意味着 [NSDate date] 方法也使用没有时区信息的时间?
编辑:
我认为这与夏令时错误有关。我看到的东西可能与时钟应用程序完全相同,但该错误会让人起床晚。此外,时区默认为您设备上当前设置的时区,因此它应该保持不变,直到您在设置屏幕中更改时区。
编辑2:
好的,还有一些测试:
NSLog(@"CurrentDate: %@", [NSDate date]);
NSLog(@"TZ: %@", [NSTimeZone defaultTimeZone]);
给我以下结果:
2010-11-03 23:23:49.000 App[8578:207] CurrentDate: 2010-11-03 22:23:49 +0000
2010-11-03 23:23:49.001 App[8578:207] TZ: Europe/Amsterdam (GMT+01:00) offset 3600