无法转换'NSDate'类型的值?预期的参数类型'String'?

问题描述 投票:-1回答:3

这是代码:

服务器的Dict值:

  {
  "leave_from" = "2016-10-26";
  "leave_to" = "2016-10-30";
  "user_id" = 327;
  } 

 let date2 = dict["leave_from"] as! String
 let dateFormatter = NSDateFormatter()
 dateFormatter.dateFormat = "dd-MM-yyyy"
 let date = dateFormatter.dateFromString(date2)
 self.FromDate.setTitle(date, forState: .Normal)

在这里我得到日期格式为yyyy-MM-dd但我想改为dd-MM-yyyy并显示在日期按钮。 请帮我找出解决方案。

swift date nsdateformatter
3个回答
1
投票

你做错了!

首先,您尝试使用不正确的格式化程序读取日期。第二步你将日期设置为按钮标题,它需要String,而不是NSDate

你应该写这样的东西:

// Created variable to represent string you fetch from Dictionary
var dateString = "2016-10-30"

// Creates date formatter instance
let dateFormatter = NSDateFormatter()

// Sets date format required to read date from variable `dateString `
dateFormatter.dateFormat = "yyyy-MM-dd"

// Reads date form variable `dateString `
let date = dateFormatter.dateFromString(dateString)

// Sets date format required to convert `Date` to `String`
dateFormatter.dateFormat = "dd-MM-yyyy"

// Converts `Date` to `String`
let buttonTitle = dateFormatter.stringFromDate(date!)

// Creates example button (just for presentation needs)
let button = UIButton()

// Sets `String` title for a button
button.setTitle(buttonTitle, forState: .Normal)

在你的情况下,它将是这样的:

let dateString = dict["leave_from"] as! String

let dateFormatter = DateFormatter()

dateFormatter.dateFormat = "yyyy-MM-dd"
let date = dateFormatter.dateFromString(dateString)

dateFormatter.dateFormat = "dd-MM-yyyy"
let buttonTitle = dateFormatter.string(from: date)

self.FromDate.setTitle(buttonTitle, forState: .Normal)

附:小心打开力量!


0
投票

好吧,显然dateFromString返回一个NSDate,setTitle需要一个String。

你需要在脑海中清楚地区分:NSDate是一个绝对的时间点。这与你的手表所说的无关。如果我打电话给你,我们都在同一时间拨打NSDate(),我们会得到相同的NSDate,即使我们的手表可能相隔数小时。

字符串用于使用某些日历和某种格式显示日期。如果要更改日历或格式,可以使用从字符串中读取NSDate的方法,然后使用另一种方法将NSDate转换为字符串。那部分遗失了。

PS。不要坚持显示格式。使用当前日历以用户想要的任何格式显示NSDate。


0
投票

您正在使用DateFormatter的dateFromString方法,该方法从字符串返回日期(如名称所示)。你想要做的是根据日期返回一个字符串,这就是你应该使用stringFromDate的原因。

如果要更改日期的格式,首先必须使用JSON中的格式解析日期,然后只需更改DateFormatter dateFormat。

    let date2 = dict["leave_from"] as! String
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    let date = dateFormatter.dateFromString(date2)

    dateFormatter.dateFormat = "dd-MM-yyyy"
    let dateString = dateFormatter.string(from: date)

    self.FromDate.setTitle(date, forState: .Normal)
© www.soinside.com 2019 - 2024. All rights reserved.