我有一个应用程序,显示某些渡轮旅行的时间表。
如果我前往不同的时区 - 比如说落后4小时,那么上午10点的轮渡旅行现在显示为早上6点?
我知道这与如何根据时区处理日期有关,但我无法弄清楚如何改变这种行为。
目前,这是我如何获取日期并在UILabel上显示:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm"];
[self.departureTime setText:[dateFormatter stringFromDate:[self.route objectForKey:@"departureTime"]]];
[self.arrivalTime setText:[dateFormatter stringFromDate:[self.route objectForKey:@"arrivalTime"]]];
[dateFormatter release];
提前感谢您的帮助。
答案 0 :(得分:7)
您需要存储渡轮乘坐时区,并为该时区进行格式化。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm"];
NSDate *now = [NSDate date];
NSLog(@"now:%@", [dateFormatter stringFromDate:now]);
NSTimeZone *timeZone = [NSTimeZone timeZoneForSecondsFromGMT:(-8 * 3600)];
[dateFormatter setTimeZone:timeZone];
NSLog(@"adjusted for timezone: %@", [dateFormatter stringFromDate:now]);
输出:
2011-10-10 20:42:23.781 Craplet[2926:707] now:20:42
2011-10-10 20:42:23.782 Craplet[2926:707] adjusted for timezone: 16:42
答案 1 :(得分:2)
您已经看过NSDateFormatter的setTimeZone方法,是吗?
(顺便说一句,如果有渡轮涉及越过四个时区,我会感到很惊讶;听起来像是一艘游轮行程给我)
答案 2 :(得分:1)
您还可以使用Apple引用中描述的NSDateComponents类:
如果您需要创建一个独立于时区的日期,您可以将日期存储为NSDateComponents对象 - 只要您存储对相应日历的一些引用。
在iOS中,NSDateComponents对象可以包含日历,时区和日期对象。因此,您可以将日历与组件一起存储。如果使用NSDateComponents类的日期方法来访问日期,请确保关联的时区是最新的。
答案 3 :(得分:0)
不要将NSDate值与NSLog等格式化输出混淆。 NSDate是GMT,Apple的文档:
NSDate的唯一原始方法,timeIntervalSinceReferenceDate, 为NSDate接口中的所有其他方法提供了基础。 此方法返回相对于绝对引用的时间值 日期 - 格林威治标准时间2001年1月1日的第一个瞬间。
NSTimeInterval referenceInterval = [[dateFormatter dateFromString:@"1 January 2001 GMT"] timeIntervalSinceReferenceDate];
NSLog(@"referenceInterval: %f", referenceInterval);
NSTimeInterval estInterval = [[dateFormatter dateFromString:@"1 January 2001 EST"] timeIntervalSinceReferenceDate];
NSLog(@"estInterval: %f", estInterval);
输出:
referenceInterval: 0.000000
estInterval: 18000.000000
答案 4 :(得分:-1)
NSDate *currentDateTime = datePicker.date;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE,MM-dd-yyyy HH:mm:ss"];
NSString *dateInStringFormated = [dateFormatter stringFromDate:currentDateTime];
NSLog(@"%@", dateInStringFormated);