我想比较和过滤NSDates,以确定今天是否有关于用户当前时区的内容。
假设我的用户位于洛杉矶(UTC-8小时)以及以下日期:
TargetDate
UTC: 2 pm (14:00) - 12. Feb 2017
LocalTime: 10 pm (22:00) - 12. Feb 2017
Now
UTC: 10 pm (22:00) - 11. Feb 2017 // Change of date!
LocalTime: 6 pm (06:00) - 12. Feb 2017
Today
UTC: 00 am (00:00) - 11. Feb 2017 // Begin of today
Tomorrow
UTC: 00 am (00:00) - 12. Feb 2017
在下一步中,我想比较TargetDate,Today和Tomorrow,以确定TargetDate是否介于今天和明天之间。这就是问题所在。当我比较日期时,我收到的答案当然不是在这些日期之间。
+ (BOOL)date:(NSDate*)date isBetweenDate:(NSDate*)beginDate andDate:(NSDate*)endDate
{
if ([date compare:beginDate] == NSOrderedAscending)
return NO;
if ([date compare:endDate] == NSOrderedDescending)
return NO;
return YES;
}
我可以做的是将UTC日期TargetDate
转换为本地时区,但我很困惑这是否是最佳解决方案。在this post中提到你不应该这样做,因为它会混淆整个问题。
有没有人有想法,如何解决这个问题?
答案 0 :(得分:0)
你遇到的问题实际上就在这里:
Today
UTC: 00 am (00:00) - 11. Feb 2017 // Begin of today
Tomorrow
UTC: 00 am (00:00) - 12. Feb 2017
您决定“日”是UTC日。相反,您需要确定目标时区中的日期。
Today
LocalTime: 00 am (00:00) - 11. Feb 2017 // Begin of today
UTC: 08 am (08:00) - 11. Feb 2017 // Equivalent UTC
Tomorrow
LocalTime: 00 am (00:00) - 12. Feb 2017 // Begin of tomorrow
UTC: 08 am (08:00) - 12. Feb 2017 // Equivalent UTC
请记住其他一些事项:
StartOfToday <= SomePointToday < StartOfTomorrow
(包括开始,独占结束)。America/Los_Angeles
并非总是UTC-8。它在夏令时期间切换到UTC-7。America/Sao_Paulo
从01:00开始。夏令时跳过00:00小时。