【发布时间】:2010-11-03 12:11:25
【问题描述】:
我正在 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] 方法也使用没有时区信息的时间?
编辑: 我认为这与夏令时错误有关。我看到的东西可能与 Clock 应用程序所看到的完全一样,只是这个错误让人们起床晚了。此外,时区默认为您设备上当前设置的时区,因此它应该保持不变,直到您在设置屏幕中更改时区。
编辑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
【问题讨论】:
标签: iphone objective-c cocoa ios