【发布时间】:2021-05-30 16:37:51
【问题描述】:
var currentDT = Date()
print(currentDT)
这会打印出比我现在需要的更多的信息。我怎样才能从中抽出时间(hh:mm:ss)或日期(dd-mm-yy)?感觉这是一个愚蠢的问题。但我无法找到任何好的文档。
【问题讨论】:
var currentDT = Date()
print(currentDT)
这会打印出比我现在需要的更多的信息。我怎样才能从中抽出时间(hh:mm:ss)或日期(dd-mm-yy)?感觉这是一个愚蠢的问题。但我无法找到任何好的文档。
【问题讨论】:
试试这个
var dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm:ss" // HH for 24h clock
let date = Date()
let timeString = dateFormatter.string(from: date)
dateFormatter.dateFormat = "dd-MM-yyyy"
let dateString = dateFormatter.string(from: date)
【讨论】:
其实这几天很简单
Text("the time is \(Date().formatted(.dateTime.hour().minute().second()))!")
【讨论】:
您正在直接打印Date 对象,它使用预定的description 算法来显示日期。
但是不应该尝试从中解析字符串。而是使用DateFormatter 来构建您的日期/时间字符串。因此,您可能有一个日期格式化程序和另一个时间格式化程序:
let dateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .short
return formatter
}()
let timeFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.timeStyle = .medium
return formatter
}()
注意,我建议不要使用硬编码的日期格式字符串并设置格式化程序的dateFormat 字符串,而是使用这些“样式”属性来指示您想要的字符串类型,同时仍然尊重用户的偏好(例如,01-02-21 在美国将被解释为 1 月 2 日,但在许多其他地区被解释为 2 月 1 日)。
无论如何,既然您拥有了这些格式化程序属性,您就可以在代码中使用它们。例如,假设您将此标记为 swiftui,您可以将 Text 与 formatter 一起使用:
var body: some View {
VStack {
Text("Date: \(date, formatter: dateFormatter)")
Text("Time: \(date, formatter: timeFormatter)")
}
}
或者,您可以使用DateFormatter方法string(from:)手动获取字符串:
let string = dateFormatter.string(from: date)
print(string) // 5/30/21 in the US; 30/5/21 in many other locales
另一方面,如果此字符串不用于在 UI 中显示,并且您确实想要一个固定的字符串格式(例如,您正在将日期字符串写入持久存储或将其包含在某些 Web 请求中),您将改为使用ISO8601DateFormatter(生成 ISO8601/RFC3339 日期字符串,格式固定,默认为 GMT/Zulu),例如:
let formatter = ISO8601DateFormatter()
let string = formatter.string(from: date)
print(string) // 2021-05-30T17:27:45Z
【讨论】:
你的意思是这样的吗?
func getFormattedDate(date: Date, format: String) -> String {
let dateformat = DateFormatter()
dateformat.dateFormat = format
return dateformat.string(from: date)
}
let formatingDate = getFormattedDate(date: Date(), format: "dd-MM-yyyy")
print(formatingDate)
//输出 30-05-2021
【讨论】: