这是代码:
服务器的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
并显示在日期按钮。
请帮我找出解决方案。
你做错了!
首先,您尝试使用不正确的格式化程序读取日期。第二步你将日期设置为按钮标题,它需要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)
附:小心打开力量!
好吧,显然dateFromString返回一个NSDate,setTitle需要一个String。
你需要在脑海中清楚地区分:NSDate是一个绝对的时间点。这与你的手表所说的无关。如果我打电话给你,我们都在同一时间拨打NSDate(),我们会得到相同的NSDate,即使我们的手表可能相隔数小时。
字符串用于使用某些日历和某种格式显示日期。如果要更改日历或格式,可以使用从字符串中读取NSDate的方法,然后使用另一种方法将NSDate转换为字符串。那部分遗失了。
PS。不要坚持显示格式。使用当前日历以用户想要的任何格式显示NSDate。
您正在使用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)