gpt4 book ai didi

ios - 在 iOS 中设置和检索日期以避免时区更改问题

转载 作者:行者123 更新时间:2023-11-29 03:00:27 29 4
gpt4 key购买 nike

我有一个“时间跟踪” 应用程序,它允许用户在用户希望的任何一天创建一个条目,但每天只允许一个条目。我将这些条目存储到 CoreData 中。

[rateObject setValue:[Day dateWithHour:currentDate forHour:12] forKey:@"date"];

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

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 小时)的日期。

当我仅将时区 移动几个小时或将标准时间 切换到夏令时 时,这似乎是一种 hack。当我从北美搬到欧洲时,它崩溃了,即旧时区的条目出现在检索的不同日期。

我想要得到的是在 2014 年 4 月 25 日创建的条目在 2014 年 4 月 25 日出现,无论我当前处于哪个时区

我查看了很多资源来理解 NSDateNSDateComponentsNSCalendar 等,但似乎无法找到一个好的来源理解这将使我能够正确或干净地实现它。任何建议表示赞赏。

这是我创建具有特定时间(天)的日期的方法。

+ (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;

最佳答案

最好使用与时区和平台无关的时间戳,您也可以从 NSDate 获取它。这样您就可以轻松地进行时间间隔的计算。如果您想要一个特定的日期,它总是与用户的时区相关。然后您可以将时间戳转换为用户格式的日期。就像 Zaph 提到的那样,他可能想查看他当前所在的日期。再次使用时间戳,这始终是可靠的。

如果您想计算在某人所在的位置每个日历日只能执行一次条目,那么您可以使用˙NSCalendar˙ 和 ˙NSDateComponents˙ 进行计算,例如时间戳代表哪一天,然后从头开始当天按24小时计算。转换回时间戳为您提供了一个有用的范围,用于检查某些内容是否在同一日历日内。 NSCalendar 是计算的基础,即使您大部分时间可能会使用 Gregorian。使用 NSDateComponents,您可以从时间戳中获取您想要的任何部分(例如,只有日、月、年等)。

关于ios - 在 iOS 中设置和检索日期以避免时区更改问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23372470/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com