首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Get Wrong out of NSDateComponent with 2011-01-01

Get Wrong out of NSDateComponent with 2011-01-01
EN

Stack Overflow用户
提问于 2011-03-09 13:23:30
回答 3查看 1.4K关注 0票数 0

我从NSDateComponents和NSDateFormatter那里得到了一些奇怪的结果。

对于给定的日期,我使用以下方法将小时设置为上午10点

代码语言:javascript
复制
+ (NSDate *)getTenOClockOnDate:(NSDate*)inputDate
{

NSCalendar *cal = [NSCalendar autoupdatingCurrentCalendar];

NSDateComponents *components = [cal components:( NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit ) fromDate:inputDate];

[components setHour:10];
[components setMinute:0];
[components setSecond:0];

// construct new date and return
NSDate *newDate = [cal dateFromComponents:components];

NSLog(@"input date: %@ -- new date: %@", inputDate, newDate);

return newDate;
}

当我发出以下呼叫时:

代码语言:javascript
复制
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];    
[MyUtils getTenOClockOnDate:[dateFormatter dateFromString:@"2010-12-31"]];
[MyUtils getTenOClockOnDate:[dateFormatter dateFromString:@"2011-01-01"]];
[MyUtils getTenOClockOnDate:[dateFormatter dateFromString:@"2011-01-02"]];

只有第二行,我得到了意想不到的结果:

代码语言:javascript
复制
input date: 2010-12-31 05:00:00 GMT -- new date: 2010-12-31 15:00:00 GMT
input date: 2011-01-01 05:00:00 GMT -- new date: 2011-12-31 15:00:00 GMT
input date: 2011-01-02 05:00:00 GMT -- new date: 2011-01-02 15:00:00 GMT

问题在第二个记录中,2011-01-01,只要将小时设置为10,它就会变成2011-12-31。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-09 20:28:46

这看起来确实很奇怪。虽然您的代码看起来应该没问题,但我的直觉是,当您初始化NSDateComponents对象时,并没有启用NSHourCalendarUnitNSMinuteCalendarUnit

虽然你可能认为这不是必要的,但我认为我遇到了类似的问题,我发现需要启用这些选项才能正确地修改日期时间,并获得您想要的结果。

如果这不起作用,也许尝试设置日历的时区可能是必要的,因为它们是我所做的唯一不同之处,而且看起来确实很有效。

票数 0
EN

Stack Overflow用户

发布于 2015-04-13 21:28:23

Swift中的Println(date)不正确,请将nsdateformatterstringfromdate一起使用

我猜这也适用于Objective-C中的nslog

票数 1
EN

Stack Overflow用户

发布于 2011-05-03 14:57:48

这将从NSDateComponents中获得正确的NSDate值,

代码语言:javascript
复制
NSDateFormatter* df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"yyyy-MM-dd"];
NSDate* date = [df dateFromString:@"2011-01-01"];
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:date];
NSInteger day = [components day];    
NSInteger month = [components month];
NSInteger year = [components year];
[df release];

NSLog(@"Day : %d, Month : %d, Year : %d",day,month,year);

这可能会对你有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5241710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档