【问题标题】:iOS NSDateFormatter TimezoneiOS NSDateFormatter 时区
【发布时间】:2012-09-28 03:14:52
【问题描述】:

我有一些代码接受一个字符串,将其转换为日期,重新格式化,然后将其作为另一个字符串吐出:

[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 中,我希望重新格式化的字符串也位于该时区,但即使在我添加了 setTimeZone: 行之后,重新格式化的字符串也会继续向前转换 4 小时。基本上,我根本不想改变时间,我只想重新格式化它,我不明白我做错了什么?

【问题讨论】:

    标签: objective-c ios xcode nsdate nsdateformatter


    【解决方案1】:

    这取决于您的日期来源指定的格式。大多数时候我以Unix/POSIX 格式处理日期。然后我使用下面两行代码:

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

    无论如何,我建议您查看 Apple Developers 网站上的以下问答: http://developer.apple.com/library/ios/#qa/qa1480/_index.html

    【讨论】:

      【解决方案2】:

      Swift 中:

          // 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
      

      【讨论】:

        猜你喜欢
        • 2013-09-16
        • 1970-01-01
        • 2012-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多