【问题标题】:Datepicker picks wrong dateDatepicker 选择错误的日期
【发布时间】:2015-01-11 20:20:59
【问题描述】:

我正在将日期转换为日期,但如果我只是 println() 在日期选择器中选择当前日期,我会得到错误的时间和日期。

@IBOutlet weak var datepicker: UIDatePicker!

@IBAction func displayDay(sender: AnyObject) {
    var chosenDate = self.datepicker.date

    println(chosenDate)

我已经选择了日期。

然后单击日期选择器下方的按钮。 我在输出中得到以下行

 2015-01-11 20:17:37 +0000

谁能告诉我。输出有什么问题?

【问题讨论】:

    标签: ios swift uidatepicker


    【解决方案1】:

    这很好,因为日期选择器使用其本地时间,但它存储 UTC 时间。这意味着您的本地时间偏移量是-5h。您可以执行以下操作以从中提取正确的日期和时间:

    extension NSDate {
        var localizedDescription: String {
           return descriptionWithLocale(NSLocale.currentLocale()) ?? ""
        }
    }
    
    println(chosenDate.localizedDescription)
    

    Swift 3 或更高版本

    extension Date {
        var localizedDescription: String {
            return description(with: .current)
        }
    }
    

    Date().localizedDescription  // "Monday, October 16, 2017 at 2:24:11 AM Brasilia Summer Time"
    

    【讨论】:

    • 谢谢!...在我提出问题后我意识到但我仍然感到困惑。
    【解决方案2】:

    Swift 3.0 - 如果您想获得日期格式的结果,请使用以下代码。

    extension Date {
    
        var convertedDate:Date {
    
            let dateFormatter = DateFormatter();
    
            let dateFormat = "dd MMM yyyy";
            dateFormatter.dateFormat = dateFormat;
            let formattedDate = dateFormatter.string(from: self);
    
            dateFormatter.locale = NSLocale.current;
            dateFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00");
    
            dateFormatter.dateFormat = dateFormat as String;
            let sourceDate = dateFormatter.date(from: formattedDate as String);
    
            return sourceDate!;
        }
    }
    
    print(pickerView.date.convertedDate)
    

    【讨论】:

      【解决方案3】:

      使用此方法获取正确的日期:

      func getDateStamp(date:String)-> String{
      
          let dateFormatter = DateFormatter()
          dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss +SSSS"
          dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
      
          guard let date = dateFormatter.date(from: date) else {
              //  assert(false, "no date from string")
              return ""
          }
      
          dateFormatter.dateFormat = "dd MMMM,yyyy" //"yyyy-MM-dd"
          dateFormatter.timeZone = TimeZone.current
      
          let st = dateFormatter.string(from: date)
      
          return st
      }
      

      【讨论】:

        【解决方案4】:

        斯威夫特 5

        let yourLocalDate = Date().description(with: .current)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-06
          • 2012-02-05
          • 1970-01-01
          • 2021-12-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多