日期格式化程序无法正常工作

时间:2018-01-11 11:18:13

标签: ios swift nsdateformatter

我有这个字符串

让myDate =“2018年1月10日06:31:01 PM”

我想用两个字符串

转换它
  1. 日期()

  2. 月份和年份(MMM yyyy)

  3. 为此我正在使用此代码

    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?

5 个答案:

答案 0 :(得分:3)

你的代码各种各样搞砸了,你到处都在扔StringDate,你应该一步一步地开始。

  1. 使用适当的格式化程序
  2. 将日期解析为date变量
  3. 根据不同的格式(使用不同的格式化程序或更改现有格式的格式)从date创建字符串表示形式。
  4. 使用您的第二个输出的另一种格式再次执行第2步
  5. 特别应该完全删除str

答案 1 :(得分:2)

timeFormatter.dateFormat = "DD"
let strdate = timeFormatter.string(from: date!)

timeFormatter.dateFormat = "MMM yyyy"
let fullDate = timeFormatter.string(from: date!)

<强>输出

enter image description here

答案 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 ?? "" )

<强>输出

enter image description here

答案 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)
   }