Wim*_*tra 6 iphone cocoa objective-c ios
我在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;
}
Run Code Online (Sandbox Code Playgroud)
我希望它返回这样的日期:"2010-11-03 00:00:00 +01".但不知怎的,时区一直在冒险,因为这段代码返回"2010-11-02 23:00:00 +0000".
任何人都可以告诉我如何修复此代码实际返回正确的日期?或者我可以使用此日期,我的应用程序将自行转换,因为机器设置的时区.
我必须将我的应用程序中的某些事件记录到数据库中,该数据库也只使用[NSDate date]方法.这是否意味着[NSDate date]方法也使用没有时区信息的时间?
编辑:我认为它与夏令时错误有关.我看到的东西与Clock应用程序可能完全相同,但是这些错误让人们起得更晚.此外,TimeZone默认为您设备上当前设置的TimeZone,因此在您更改设置屏幕中的时区之前,它应保持不变.
EDIT2:好的,还有一些测试:
NSLog(@"CurrentDate: %@", [NSDate date]);
NSLog(@"TZ: %@", [NSTimeZone defaultTimeZone]);
Run Code Online (Sandbox Code Playgroud)
给我以下结果:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7860 次 |
| 最近记录: |