我一直在尝试使用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")
}
答案 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)")
但是,如果您想在今天的午夜增加几秒钟,我建议采用另一种方法。 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