如何将此字符串转换为具有这种格式的日期?
Posted
技术标签:
【中文标题】如何将此字符串转换为具有这种格式的日期?【英文标题】:How to convert this string in a date with this format? 【发布时间】:2019-07-29 18:06:48 【问题描述】:我正在使用 API,当我要求约会时,这个 API 会得到我的 String
,如下所示:
20190717-0300
我想以 UILabel
的格式显示该日期:"dd '\(preposition)' MMMM"
我的尝试是做一个字符串扩展:
extension String
var toDate: String?
let dateFormatter = DateFormatter()
let preposition = NSLocalizedString("of", comment: "Preposition of dates formatted")
dateFormatter.dateFormat = "dd '\(preposition)' MMMM"
dateFormatter.locale = Locale.current
if let date = dateFormatter.date(from: self)
let dateString = dateFormatter.string(from: date)
return dateString
return nil
然后使用它:
myLabel.text = thatString.toDate
但是.toDate
总是返回nil
注意:我在网站上找到的答案都是 ISO 格式字符串的情况。
预期结果:
7 月 17 日
【问题讨论】:
在将日期字符串从一种格式转换为另一种格式时,您需要两个日期格式化程序。 附带说明,您应该避免使用硬编码的“dd prep MMMM”格式。使用正确本地化的格式,以避免使用不自然的格式混淆用户。dateFormatter.setLocalizedDateFormatFromTemplate("ddMMMM")
。例如,这在美国给出“MMMM dd”,在西班牙给出“dd 'de' MMMM”,在德国给出“dd, MMMM”。
感谢您的 cmets,我将尝试在我的代码中实现它们。
How can I convert string date to NSDate?的可能重复
【参考方案1】:
基本上你需要一个输入日期格式和一个输出日期格式。
extension String
var toDate: String?
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyyMMddZ"
if let date = dateFormatter.date(from: self)
let preposition = NSLocalizedString("of", comment: "Preposition of dates formatted")
dateFormatter.dateFormat = "dd '\(preposition)' MMMM"
let dateString = dateFormatter.string(from: date)
return dateString
return nil
我完全同意 rmaddy 的评论使用setLocalizedDateFormatFromTemplate
日期字段符号的来源是unicode.org: Date Format Patterns
【讨论】:
【参考方案2】:如果你愿意,可以把它变成扩展:
// function
func formatDate(_ from:String, preposition:String) -> String?
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyyMMddZ"
guard let date = dateFormatter.date(from: from) else
return nil
dateFormatter.dateFormat = "dd '\(preposition)' MMMM"
return dateFormatter.string(from: date)
// example usage
let str = "20190717-0300"
if let formatted = formatDate(str, preposition: "of")
print(formatted)
【讨论】:
1.这是如何扩展的? 2. 这对现有答案有何改进? 3. 不要发布仅代码的答案。解释问题中的问题以及此答案如何解决问题。 以前的答案很好。这只是删除格式化程序字符串中不必要的撇号,并使用guard-let而不是简单的if-let。另请注意不再使用“NSanything”,因为这些将长期弃用。只是帮助某人以防万一,而不是在这里得分。NSLocalizeedString
仍用于本地化字符串。你需要\(preposition)
周围的'
。它们是用日期格式引用字符串文字所必需的。
maddy介词是变量,不需要引号。
日期格式需要在结果两边加上引号。例如,dateFormat
将等于您的代码中的 "dd of MMMM"
,而它需要是 "dd 'of' MMMM"
。以上是关于如何将此字符串转换为具有这种格式的日期?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 python 日期时间转换为具有可读格式日期的字符串?