【问题标题】:How to take just the current time (hh:mm:ss format) from Date() in Swift?如何从 Swift 中的 Date() 中获取当前时间(hh:mm:ss 格式)?
【发布时间】:2021-05-30 16:37:51
【问题描述】:
var currentDT = Date()

print(currentDT)

这会打印出比我现在需要的更多的信息。我怎样才能从中抽出时间(hh:mm:ss)或日期(dd-mm-yy)?感觉这是一个愚蠢的问题。但我无法找到任何好的文档。

【问题讨论】:

    标签: swift date swiftui


    【解决方案1】:

    试试这个

    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)
    

    【讨论】:

      【解决方案2】:

      其实这几天很简单

      Text("the time is \(Date().formatted(.dateTime.hour().minute().second()))!")
      

      【讨论】:

        【解决方案3】:

        您正在直接打印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 日)。

        无论如何,既然您拥有了这些格式化程序属性,您就可以在代码中使用它们。例如,假设您将此标记为 ,您可以将 Textformatter 一起使用:

        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
        

        【讨论】:

        • 谢谢!我对其进行了一些调整以适合我,现在可以了!
        【解决方案4】:

        你的意思是这样的吗?

        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

        【讨论】:

          猜你喜欢
          • 2022-01-19
          • 1970-01-01
          • 1970-01-01
          • 2019-03-26
          • 2021-10-08
          • 1970-01-01
          • 2019-01-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多