[英]Swift Date literal / Date initialisation from string
我需要將日期初始化為已知的固定時間點。 Swift缺乏日期字面量,我嘗試過:
extension DateFormatter
{
convenience init(_ format: String)
{
self.init()
self.dateFormat = format
}
}
extension Date
{
init?(_ yyyyMMdd: String)
{
let formatter = DateFormatter("yyyyMMdd")
self = formatter.date(from: yyyyMMdd)
}
}
不幸的是,我不能將self = ...
或return formatter.date...
作為初始化程序的一部分。
但是,我非常想寫:
let date = Date("20120721")
我該如何實現?
您可以通過為self
分配值來初始化struct
。 您遇到的問題是formatter.date(from:)
返回一個可選參數,因此您必須先將其解包:
extension Date {
init?(yyMMdd: String) {
let formatter = DateFormatter("yyyyMMdd")
guard let date = formatter.date(from: yyMMdd) else {
return nil
}
self = date
}
}
您甚至可以通過采用ExpressibleByStringLiteral
協議從字符串文字中初始化日期:
extension Date: ExpressibleByStringLiteral {
public init(stringLiteral value: String) {
let formatter = DateFormatter("yyyyMMdd")
self = formatter.date(from: value)!
}
public init(extendedGraphemeClusterLiteral value: String) {
self.init(stringLiteral: value)
}
public init(unicodeScalarLiteral value: String) {
self.init(stringLiteral: value)
}
}
let date: Date = "20120721"
但是請注意,對於無效日期,這將在運行時崩潰。
還有兩句話:
Locale(identifier: "en_US_POSIX")
以允許解析日期字符串,而與用戶的語言環境設置無關。 TimeZone(secondsFromGMT: 0)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.