首页 > 解决方案 > 如何使用 DateFormatter() 格式化日期

问题描述

我一直在尝试使用 DateFormatter 格式化时间,但它一直返回 nil。我知道它的格式不正确,这就是为什么我尝试在第 5 行对其进行格式化。但是代码不断出现打印错误。

        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "hh:mm a"

        dateFormatter.locale = Locale(identifier: "en_US_POSIX")
        let date = dateFormatter.date(from: "77000")
        if date != nil{
        print(dateFormatter.string(from: date!))
        }else{
            print("Error")
        }

标签: swiftdatensdateformatter

解决方案


如果您在确定日期格式化程序时遇到问题,使用一个将Date对象转换为 a String(使用 DateFormatter 函数string(from:))会很有帮助。记录结果,研究它们,并使用您所看到的来确定日期格式化程序与您想要的日期格式。

在您的情况下,您有一个使用“hh:mm a”格式的 DateFormatter。所以它需要小时、冒号、分钟和 AM/PM 符号,例如“12:23 PM”。

获取您的代码:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm a"

dateFormatter.locale = Locale(identifier: "en_US_POSIX")

let dateString = dateFormatter.string(from: Date())
print(dateString)

在操场上运行它,我们得到如下输出:

下午 5 点 48 分

您正在尝试为其提供“77000”的日期字符串。你说那是“几秒钟”。但是您的日期格式化程序不需要秒。它需要小时、分钟和 AM/PM 符号。

编辑:

我想没有办法使用 DateFormatter 将秒转换为日期。但是,有一个格式字符“A”,它代表一天中的毫秒数。您可以使用它,但您需要将秒数乘以 1000。

如果要以毫秒为单位输入日期并将其转换为小时、分钟和 AM/PM 符号,则需要 2 个日期格式化程序:一个用于输入格式,一个用于输出格式。您的代码可能如下所示:

let inputFormatter = DateFormatter()
inputFormatter.dateFormat = "A"

let outputFormatter = DateFormatter()
outputFormatter.dateFormat = "hh:mm a"

outputFormatter.locale = Locale(identifier: "en_US_POSIX")

let dateString = outputFormatter.string(from: Date())
print(dateString)

guard let dateFromSeconds = inputFormatter.date(from: "77000000") else {
    fatalError("Can't convert '77000000' to a date")
}

let displayString = DateFormatter.localizedString(from: dateFromSeconds, dateStyle: .medium, timeStyle: .medium)
print("displayString = \(displayString)")

编辑#2:

但是,如果您想在今天午夜增加几秒钟,我建议采用不同的方法。Calendar 类具有一整套方法,可让您进行“日历计算”。在这种情况下,我们将使用date(byAdding:value:to:wrappingComponents:).

该代码可能看起来像这样(仍然使用上面代码中的 outputFormatter):

let calendar = Calendar.current

let midnight = calendar.startOfDay(for: Date()) //Get the date of midnight today, local time

if let newDate = calendar.date(byAdding: .second, value: 77000, to: midnight) {
    let output = outputFormatter.string(from: newDate)
    print("date using Calendar.date(byAdding:value:to:wrappingComponents) = \(output)")
}

这会产生:

使用 Calendar.date(byAdding:value:to:wrappingComponents) = 09:23 PM 的日期


推荐阅读