如何使用DateFormatter()格式化日期

时间:2019-07-03 20:51:22

标签: swift date nsdateformatter

我一直在尝试使用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")
        }

1 个答案:

答案 0 :(得分:0)

如果您在确定日期格式器时遇到麻烦,使用一个格式将Date对象转换为String(使用DateFormatter函数string(from:))会很有帮助。 ,研究它们,然后使用所见即所得来找出日期格式器与所需日期格式的不同之处。

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

接受您的代码:

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

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

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

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

  

05:48 PM

您正试图为其输入日期字符串“ 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