2012-10-07 48 views
1

我有一些代碼,需要一個字符串,把它變成一個日期,重新格式化然後吐出它作爲另一個字符串:的iOS NSDateFormatter時區

[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]; 

基本上,它的工作原理除了時區的罰款。所有的輸入字符串都在時區-0400,我希望重新格式化的字符串也在該時區,但重新格式化的字符串不斷向前轉換4小時,即使在我添加了setTimeZone:行之後。基本上,我不想改變時間,我只是想重新格式化它,而我不明白我做錯了什麼?

回答

2

它取決於您的日期來源指定的格式。大多數時候我處理的日期格式爲Unix/POSIX。然後,我使用的代碼如下兩行:

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

無論如何,我建議你從蘋果開發者網站查詢以下是問答&答: http://developer.apple.com/library/ios/#qa/qa1480/_index.html

0

斯威夫特

// Formatter configuration 
    let formatter: NSDateFormatter = NSDateFormatter() 
    let posix: NSLocale = NSLocale(localeIdentifier: "en_US_POSIX") 
    formatter.locale = posix 
    formatter.dateFormat = "d.M.y" 
    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