swift - 使用 DateFormatter 格式化字符串日期
问题描述
我正在制作一个函数来将字符串日期(如“2018-05-01 18:23:31”)格式化为日本日期格式的字符串类型,即“2018 年 5 月 1 日”。我做了一个函数,但是当我运行它时会抛出一个错误说
致命错误:在展开可选值时意外发现 nil
当我打印输入字符串日期时,它有一个值,但是在转换时,我开始收到错误。谁能告诉我为什么我在这个功能中得到了零?
func setTemplate (strDate: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "ydMMM", options: 0, locale: Locale(identifier: "ja_JP"))
print(strDate) // getting this value => "2018-05-01 18:23:31"
let date = dateFormatter.date(from: strDate)! // getting an error in here
let result = dateFormatter.string(from: date)
return result
}
我想我正试图摆脱字符串中的时间,它以某种方式抛出了一个错误,但不确定......
解决方案
您需要首先解析您的字符串,然后您可以从结果日期中获取本地化字符串:
let strDate = "2018-05-01 18:23:31"
func setTemplate (strDate: String) -> String? {
let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
guard let date = dateFormatter.date(from: strDate) else { return nil }
let locale = Locale(identifier: "ja_JP")
dateFormatter.locale = locale
dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "ydMMM", options: 0, locale: locale)
return dateFormatter.string(from: date)
}
setTemplate(strDate: strDate) // "2018年5月1日"
推荐阅读
- spring-boot - 兔子模板确认回调不起作用
- spring - Spring aop 自定义注释在 Handler Interceptor 类中给出错误
- java - 如何修复 SQLException “找不到适合 jdbc 的驱动程序”?
- json - 当结构属性是可选的时,如何检测数据值是否为零
- c# - 从 DbSet 映射 T
使用 EF 进入 Dabase 内部表示 - mysql - 获取 1 个月内过期的记录
- scala - spark如何将数据加载到内存中
- node.js - 如何在nodejs post请求中获取文件的路径以在文件中写入一些数据
- c# - 如何在 TextBlock WPF DataGridTextColumn 的编辑模式下换行
- sass - Scss命名嵌套类与否