我正在尝试格式化一个日期字符串,该字符串来自一个API,该API提供了以下格式的时间戳(例如):1970-01-01T12:30:00.000000Z
.
我想以这种格式显示日期:1st January 1970
.
在PHP中我可以这样写:
dateString = date( 'jS F Y', strtotime( $myUnformattedTimestamp ) );
如何在Swift中实现这一点?
我做了一些强制性的谷歌搜索,从另一个SO问题中找到了这个答案,但它没有帮助,因为它不适用于我的情况(可以说,更广泛)。
下面是答案中的代码:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy"
let date = dateFormatter.date(from: date)
dateFormatter.dateFormat = "yyyy-MM-dd"
let resultString = dateFormatter.string(from: date!)
print(resultString)
我试着用我的变量替换date变量,但我得到了各种各样的错误,并且对Xcode告诉我的内容感到困惑。
我使用Swift才2个月,所以我还不太清楚它是如何处理日期和时间的。我怎样才能像php那样简单地将时间戳格式化成各种格式呢?
编辑
我从@udi answer中提取了一些代码,至少在一个没有st,nd,rd,th后缀的简单实现中做了第一遍,得到了以下代码:
let dateFormatterGet = DateFormatter()
dateFormatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dateFormatterPrint = DateFormatter()
dateFormatterPrint.dateFormat = "d MMM yyyy"
if let date = dateFormatterPrint.date(from: created_at) {
return dateFormatterPrint.string(from: date)
} else {
return "FAILED"
}
这是我的模型中的值(如上所示):
created_at: 1970-01-01T12:30:00.000000Z
上面的代码一直返回FAILED
。这是因为时间戳必须与时间戳的格式完全匹配吗?这是Swift正确转换它的要求吗?无论如何,我不知道为什么它仍然不工作。
编辑2
这是我的模型,其中包含我的时间戳。
struct Message: Codable, Identifiable {
var id:Int = 0
var user_id:Int = 0
var author_id:Int = 0
var message:String = ""
var unread:Int = 1
var created_at:String = ""
var updated_at:String = ""
}
API以字符串形式返回created_at
和updated_at
时间戳,格式为YYYY-MM-DD HH:ii:ss
,因此基本上是1970-01-01 12:30:00
。
在我的API请求中,它取回数据并将其格式化为:
let myMessage = try! JSONDecoder().decode(Message.self, from: data!)
那么,也许JSON解码器正在更改我的时间戳?
1条答案
按热度按时间4ioopgfo1#
在我看来,您得到的日期是Internet日期的格式,因此我们可以使用
ISO8601DateFormatter
将字符串date转换为Date
对象。那么,我建议您不要创建自己的输出格式,而是使用一种预定义的格式,让用户的设置来确定它的格式,假设您希望在UI中显示此日期。
示例