【发布时间】:2016-08-10 08:27:18
【问题描述】:
我正在为遗留数据对象编写一个 GUI,其中日期保存在整数属性 day of the year 和 year(真正的“天才”设计......)
在给定年份的情况下,如何将此数据转换为日和月?
我目前正在尝试:
int theYear = 2016;
int theDayOfTheYear = 222;
NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:theYear];
[components setDay:theDayOfTheYear];
NSDate* theDate = [gregorian dateFromComponents:components];
这对我来说似乎有点太老套了。可能只是巧合,它适用于 >31 天 - 在 NSDateComponents 类参考中没有发现任何提及。
当我调试时,po theDate 给了我2016-08-08 22:00:00 +0000
--> 关闭,但应该是2016-08-09 (!)
要执行反向操作,即将正常的 DD-MM-YYYY 日期转换为 day of the year,我正在使用以下代码:
NSDate *fullDate = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger dayOfYear = [gregorian ordinalityOfUnit:NSDayCalendarUnit
inUnit:NSYearCalendarUnit
forDate:fullDate];
但我似乎找不到合适的方法来做相反的事情......
【问题讨论】:
-
我很惊讶它完全有效; day 组件的解释取决于日历(不清楚具体是如何工作的)。还要WRT调试输出日期;您是否考虑过
po会以 UTC 格式打印日期/时间,而不是您当地的时区?
标签: objective-c nsdate nsdatecomponents