我有这个字符串
让myDate =“2018年1月10日06:31:01 PM”
我想用两个字符串
转换它日期()
月份和年份(MMM yyyy)
为此我正在使用此代码
let timeFormatter = DateFormatter()
//first converting string into date
timeFormatter.dateFormat = "dd MM yyyy hh:mm:ss a"
let date = timeFormatter.date(from: myDate)
// date into string
let str = timeFormatter.string(from: date!)
print(str )
// know changing resultant string into desire format
timeFormatter.dateFormat = "dd"
let strdate = timeFormatter.date(from: str)
timeFormatter.dateFormat = "MMM yyyy"
let fullDate = timeFormatter.date(from: str)
cell.lblFullDate.text = "\(String(describing: strdate))"
cell.lblDate.text = "\(String(describing: fullDate))"
当我运行它时,编译器卡在这一行
let date = timeFormatter.date(from: myDate)
因为这个日期格式不正确
timeFormatter.dateFormat = "dd MM yyyy hh:mm:ss a"
我应该使用什么DateFormatter?
答案 0 :(得分:3)
你的代码各种各样搞砸了,你到处都在扔String
和Date
,你应该一步一步地开始。
date
变量
date
创建字符串表示形式。特别应该完全删除str
。
答案 1 :(得分:2)
试
timeFormatter.dateFormat = "DD"
let strdate = timeFormatter.string(from: date!)
timeFormatter.dateFormat = "MMM yyyy"
let fullDate = timeFormatter.string(from: date!)
<强>输出强>
答案 2 :(得分:1)
您可以尝试这样做
guard let timeString = single["earndate"] as? String else { return }
let timeFormatter = DateFormatter()
timeFormatter.dateFormat = "dd MM yyyy hh:mm:ss a"
let date = timeFormatter.date(from: timeString)
let str = timeFormatter.string(from: date!)
print(str)
timeFormatter.dateFormat = "dd"
let strdate = timeFormatter.date(from: str)
timeFormatter.dateFormat = "MMM yyyy"
let fullDate = timeFormatter.date(from: str)
cell.lblFullDate.text = "\(String(describing: strdate))"
cell.lblDate.text = "\(String(describing: fullDate))"
答案 3 :(得分:1)
如果您遇到错误,请在分配前检查
guard let earnDate = single["earndate"] as? String else { return }
你试图从日期中获取两个不同的字符串是完全错误的。
喜欢
let timeFormatter = DateFormatter()
timeFormatter.dateFormat = "dd MMM yyyy hh:mm:ss a"
let date = timeFormatter.date(from: "10 Jan 2018 06:31:01 PM")
timeFormatter.dateFormat = "dd-MMM yyyy"
let str = timeFormatter.string(from: date!)
let finalVal = str.components(separatedBy: "-")
print(finalVal.first ?? "" )
print(finalVal.last ?? "" )
<强>输出强>
答案 4 :(得分:1)
由于您没有发布任何错误消息,并且您使用DateFormatter将字符串转换为日期所编写的代码是正确的,我建议您检查(single["earndate"] as? String)
。
哪个可能会返回nil
,并使你的编译器陷入困境&#34;。
您可以使用保护声明,如:
guard let earnDate = single["earndate"] as? String else { return }
var date = "";
if earnDate {
date = timeFormatter.date(from: earnDate)
}