我有一个NSDates
数组,我使用[NSDate dateFromString]
从字符串构建
在解析得到字符串的xml中,还有一个时区字符串。据我所知,NSDate
手册中没有自己处理时区。我是否需要始终将此时区值存储在某处,并在每次需要时将其与所有属NSDate
配对?
我还需要弄清楚,如果一个活动在伦敦10点开始,但我在丹麦,我的iPhone设置为丹麦时间,我的“伦敦活动”应该在09:00显示。
如果一个事件在伦敦10点钟开始,并在丹麦中午12点结束,如果我要使用带有丹麦语设置的iPhone比较开始时间和结束时间,我会得到活动时间为02:00,英国时间10:00,丹麦中午12点仅相隔1小时。
NSdate
在一个时区范围内对这些事情非常有效,但引入时区部分只会让一切变得复杂。有没有办法抽象/隐藏所有这些计算,因为我发现可能会犯很多错误。
我已经浏览过Apple的NSDateformatter和NSDate指南,但它们非常含糊,并且有大量弃用的代码:/
感谢您给予的任何帮助。
答案 0 :(得分:1)
您应该为UTC / GMT格式采用一个标准时区进行所有计算。
答案 1 :(得分:1)
根据NSDate reference,dateWithString:
将GMT的偏移量作为最后一个分量;虽然它不是一个时区,但它足以进行计算或比较。)
查看NSTimeZone reference,您可以使用abbreviationForDate:
和timeZoneWithAbbreviation:
从NSTimeZone
实例中获取NSDate
个对象。一旦你获得了时区,你就拥有了所需的一切。
答案 2 :(得分:1)
我将目前的日期和我想知道的日期转换为GMT,然后返回差异。所以我改变了一切来处理差异而不是实际的时间和日期。有点像转换为不同键的乐谱:)
+ (NSInteger) minutesUntilDate:(NSDate*) date withTimezoneOffset:(NSInteger) GMTOffset
{
NSDate *now = [NSDate date];
NSTimeInterval localTimeZoneOffset = [[NSTimeZone defaultTimeZone] secondsFromGMT];
now = [now addTimeInterval:(localTimeZoneOffset * -1)];
date = [date addTimeInterval:(GMTOffset * 60 * 60) * −1];
return ((NSInteger)[now timeIntervalSinceDate:date] / 60 ) * -1;
}
答案 3 :(得分:0)
一旦分配了NSDate,它们就不再具有时区信息。 NSDate是“无时区”,并且始终处于GMT状态。在分配时,您应确保NSDate正确理解您的格式。
获得NSDate后,您可以进行正常计算并忽略时区。
在将字符串读入NSDates并将其打印出来时,您只需要处理时区。