首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iOS中设置和检索避免时区更改问题的日期

在iOS中设置和检索避免时区更改问题的日期
EN

Stack Overflow用户
提问于 2014-04-29 18:26:41
回答 1查看 148关注 0票数 0

我有一个"time-tracking"应用程序,允许用户在用户想要的任何日期创建条目,但每天只允许创建一个条目。我将这些条目存储到CoreData中。

代码语言:javascript
复制
[rateObject setValue:[Day dateWithHour:currentDate forHour:12] forKey:@"date"];

稍后,我使用以下代码检索这些条目。

代码语言:javascript
复制
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Day"];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]];
request.predicate = [NSPredicate predicateWithFormat:@"whoWorked == %@ && date => %@ && date =< %@", whoWorked, [Day dateWithHour:fromDate forHour:0], [Day dateWithHour:toDate forHour:24]];

如您所见,我将条目放置在中午(12小时),并检索从第一天开始(0小时)到最后一天结束(24小时)的日期。

当我只将时区转换几个小时或将标准时间切换到Daylight Savings时,这种攻击似乎是有效的。当我从NA搬到欧洲时,它就分崩离析了,即旧时区的条目在检索过程中出现在不同的日子。

我想要得到的是2014年4月25日的一个条目,无论我目前在哪个时区,都会在2014年4月25日出现。

我已经看过许多可以理解NSDateNSDateComponentsNSCalendar等的资源,但似乎无法很好地理解它,这将使我能够正确或干净地实现这一点。任何建议都很感激。

下面是我的方法,用于创建一个特定时间的日期(在一天中)。

代码语言:javascript
复制
+ (NSDate *)dateWithHour:(NSDate *)date forHour:(int)hour {

// Create and initialize date component instance
NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit fromDate:date];

if (hour<0) hour = 0;
else if (hour>24) hour = 24;

[dateComponents setHour:hour];

// Create period dates
NSDate *newDate = [[NSCalendar currentCalendar] dateFromComponents:dateComponents];

return newDate;

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-29 19:27:06

使用时区和平台无关的最佳方法是时间戳,您也可以从NSDate获得时间戳。有了它,你可以很容易地用时间间隔进行计算。如果您希望有一个特定的日期,它总是与用户的时区相关。然后,您可以将时间戳转换为用户格式化的日期。就像Zaph提到的,他可能想看看他现在的日期。同样,使用时间戳,这始终是可靠的。

如果要计算某人所在位置的每个日历日只能执行一次条目,则可以使用·NSCalendar·和·NSDateComponents·计算,例如时间戳代表的日期,然后从当天开始计算24小时。转换回时间戳为您提供了一个有用的范围,用于检查某物是否在同一日历日内。NSCalendar是计算的基础,即使您可能大部分时间都会使用Gregorian。有了NSDateComponents,你可以从你的时间戳中分离出你想要的任何东西(例如,只有一天、一个月、一个年份等等)。

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

https://stackoverflow.com/questions/23372470

复制
相关文章

相似问题

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