iOS NSDateFormatter时区

我有一些代码需要一个string,把它变成一个date,重新格式化,然后吐出作为另一个string:

[formatter setDateFormat:@"YYYY'-'MM'-'DD','HH:mm:ss','ZZZ"]; [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"America/New_York"]]; NSDate *date = [formatter dateFromString:combinedString]; [formatter setDateStyle:NSDateFormatterLongStyle]; NSString *finishedString = [formatter stringFromDate:date]; 

基本上,除了时区以外,它工作正常。 所有的inputstring都在时区-0400,我希望重新格式化的string也在该时区,但重新格式化的string不断向前转换4小时,即使我添加了setTimeZone:行。 基本上,我不想改变时间,我只是想重新格式化,我不明白我做错了什么?

这取决于您的date来源指定的格式。 大部分时间我都用Unix / POSIX格式处理date。 然后我使用以下两行代码:

 [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; [formatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]]; 

无论如何,我build议您从Apple开发人员网站上查看以下Q&A: http : //developer.apple.com/library/ios/#qa/qa1480/_index.html

Swift中

  // Formatter configuration let formatter: NSDateFormatter = NSDateFormatter() let posix: NSLocale = NSLocale(localeIdentifier: "en_US_POSIX") formatter.locale = posix formatter.dateFormat = "dMy" formatter.timeZone = NSTimeZone(name: "UTC")! // String to date let dateString: String = "1.1.2013" let defaultDate: NSDate = formatter.dateFromString(dateString)! println("defaultDate: \(defaultDate)") self.dateOfBirthUIDatePicker.date = defaultDate