我正在从远程服务器检索一些日期。不幸的是,其中一种可能的格式只是 h:mm:a
我昨天 2013 年 5 月 21 日下载的数据示例:
1) 美国东部时间下午 4:36
2) 美国东部时间晚上 11:51
数据服务器 TimeZone 是“America/New_York”。
我的数据时区是“欧洲/罗马”。
这是我编写的代码,直到今天早上 5 点我还认为它有效:
NSDate *myDate = @"04:36PM EDT"; //11:51PM EDT (I know the date is May, 21 2013 but it is not in the data!)
NSArray *component = [mydate componentsSeparatedByString:@" "];
//Remove any reference to the TimeZone
//set it in the dateFormatter
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat =@"MM dd yyyy h:mma";
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
dateFormatter.timeZone = [[NSTimeZone alloc] initWithName:@"America/New_York"];
//Create a valid date for the hour
NSDate *date = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:date];
NSDate *dateObject = [self.dateFormatter dateFromString: [NSString stringWithFormat:@"%u %u %u %@",
dateComponents.month,
dateComponents.day,
dateComponents.year,
[component objectAtIndex:0]]];
//Convert to local timeZone
dateFormatter.timeZone = [NSTimeZone localTimeZone]; // @"Europe/Rome"
dateFormatter.dateStyle = NSDateFormatterShortStyle;
dateFormatter.timeStyle = NSDateFormatterLongStyle;
NSString *localTimeZoneDate = dateFormatter stringFromDate:[dateObject];
NSLog(@"Local Time Zone Date = %@", localTimeZoneDate);
输出
虽然昨天代码似乎运行良好,因为当我进行测试时,我仍然处于 6 小时的时间跨度内,这让我保持在同一天,即 5 月 21 日,今天早上我发现它没有。问题在于创建正确的日期。
1) 美国东部时间下午 4:36 ----> 22 /05/2013 22:36:00 CEST
正确的输出应该是21 /05/2013 22:36 CEST
2) 美国东部时间晚上 11:51 ----> 23 /05/2013 05:51:00 CEST
正确的输出应该是22 /05/2013 05:51 CEST
处理这种特殊情况的最佳代码是什么?
谢谢
尼古拉