Search code examples
iosobjective-cswiftnsdatensdateformatter

change NSDate from one time zone to another


Given a date in NSString like "2012-12-17 04:36:25" (which is GMT) how one can simply change it to other time zones like EST, CST

All the steps I saw so far took so many unnecessary steps


Solution

  • 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);
    

    Edit : Adding swift code

    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)
    

    Edit: Adding Swift 3 code

        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)