将NSDate从一个时区更改为另一个时区

给定NSString一个date,如“2012-12-17 04:36:25”(即GMT),如何将其简单地更改为EST,CST等其他时区

到目前为止,我所看到的所有步骤都采取了很多不必要的步

 NSString *str = @"2012-12-17 04:36:25"; NSDateFormatter* gmtDf = [[[NSDateFormatter alloc] init] autorelease]; [gmtDf setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; [gmtDf setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate* gmtDate = [gmtDf dateFromString:str]; NSLog(@"%@",gmtDate); NSDateFormatter* estDf = [[[NSDateFormatter alloc] init] autorelease]; [estDf setTimeZone:[NSTimeZone timeZoneWithName:@"EST"]]; [estDf setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *estDate = [estDf dateFromString:[gmtDf stringFromDate:gmtDate]]; // you can also use str NSLog(@"%@",estDate); 

编辑:添加swift代码

 let str: String = "2012-12-17 04:36:25" let gmtDf: NSDateFormatter = NSDateFormatter() gmtDf.timeZone = NSTimeZone(name: "GMT") gmtDf.dateFormat = "yyyy-MM-dd HH:mm:ss" let gmtDate: NSDate = gmtDf.dateFromString(str)! print(gmtDate) let estDf: NSDateFormatter = NSDateFormatter() estDf.timeZone = NSTimeZone(name: "EST") estDf.dateFormat = "yyyy-MM-dd HH:mm:ss" let estDate: NSDate = estDf.dateFromString(gmtDf.stringFromDate(gmtDate))! print(estDate) 

编辑:添加Swift 3代码

  let str: String = "2012-12-17 04:36:25" let gmtDf = DateFormatter() gmtDf.timeZone = TimeZone(identifier: "GMT") gmtDf.dateFormat = "yyyy-MM-dd HH:mm:ss" let gmtDate = gmtDf.date(from: str)! print(gmtDate) let estDf = DateFormatter() estDf.timeZone = TimeZone(identifier: "EST") estDf.dateFormat = "yyyy-MM-dd HH:mm:ss" let estDate = estDf.date(from: gmtDf.string(from: gmtDate))! print(estDate)