swift - 如何使用 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")
}
解决方案
如果您在确定日期格式化程序时遇到问题,使用一个将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 的日期
推荐阅读
- c# - 更改我的查找和替换代码以更改 xml 标记之间的所有内容
- ios - 启动屏幕iOS后显示白屏
- forms - Android.Views.InflateException: Binary XML file line #1: Error inflating class fragment for google maps in forms
- python - 具有多个链表作为参数的递归替代/合并链表函数?
- javascript - 如何使用正则表达式在字符串中数字出现的开头添加 \n
- android - 当通知进入android时如何获取Bundle数据
- c# - 类级别的可本地化的 DisplayName 属性
- python - 当我在 sympy 中使用solve()时变量的空列表?
- javascript - 在另一个图像上显示字体真棒图标
- java - Spring Rest模板覆盖授权标头值