我正在尝试将时间字符串从一个时区转换为 NSDate 对象,然后使用本地时区将其输出回字符串。不过,我似乎要出去 1 小时。例如,我添加了输出时区,以便显示错误。有一些类似的问题,但没有任何迹象表明我在哪里出错了!!!在发布此消息时,两个时区目前都处于夏令时 - 但是 NSDateFormatter 应该处理基于时区的任何差异。
更新:问题似乎在于将 LA 时间转换为 GMT,而不是转换为 BST。据我所知,所有 NSDate 都存储为 GMT。下面的代码演示了这一点(添加了语言环境 - 似乎没有什么区别):
NSDateFormatter *dateF = [[NSDateFormatter alloc] init];
[dateF setDateFormat:@"HH:mm"];
[dateF setTimeZone:[NSTimeZone timeZoneWithName:@"America/Los_Angeles"]];
[dateF setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
NSDate* sourceDate = [dateF dateFromString:@"09:15"];
NSLog(@"Date GMT: %@", [sourceDate description]);
NSLog(@"Date BST: %@", [sourceDate descriptionWithLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]]);
输出:
格林威治标准时间:1970-01-01 17:15:00 +0000这是不正确的!
日期 BST:1970 年 1 月 1 日星期四 18:15:00 GMT+01:00因此这也是不正确的
原始示例
洛杉矶的 09:15 应该是伦敦的 17:15,而不是 18:15...
NSDateFormatter *dateF = [[NSDateFormatter alloc] init];
[dateF setDateFormat:@"HH:mm"];
[dateF setTimeZone:[NSTimeZone timeZoneWithName:@"America/Los_Angeles"]];
NSDate* sourceDate = [dateF dateFromString:@"09:15"];
NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];
[dateformatter setDateFormat:@"HH:mm"];
[dateformatter setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/London"]];
NSLog(@"%@", [dateformatter stringFromDate:sourceDate]);