我正在使用设备时间来获取日期组件。这可以正常使用12小时formate,但是如果用户将设备时间更改为24小时,则会显示错误的计算。使用以下方法进行转换,但始终返回nil。
let dateAsString = "\(Date())"
let df = DateFormatter()
df.dateFormat = "yyyy-mm-dd HH:mm:ss zzz"
let date = df.date(from: dateAsString)
df.dateFormat = "d MMM yyyy h:mm a"
let time12 = df.string(from: date!)
print(time12)
答案 0 :(得分:1)
我刚刚尝试过在两种情况下都可以正常工作。与AM
或PM
或24Format
一起使用,如果您将a
中的formatter.dateFormat = "dd MMM yyyy HH:mm a"
删除,则会得到24种格式。甚至我在我的代码中使用它。
let someDate = Date()
let formatter = DateFormatter()
formatter.dateFormat = "dd MMM yyyy HH:mm a"
let someDateTime = formatter.string(from: someDate)
print(someDateTime)
打印:
21 Feb 2020 09:35 AM
答案 1 :(得分:1)
因此,您遇到的核心问题是yyyy-mm-dd
使用的是分钟的mm
而不是几个月的MM
。
因此,如果相反,您尝试过类似...
let dateAsString = "\(Date())"
let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm:ss zzz"
let date = df.date(from: dateAsString)
df.dateFormat = "d MMM yyyy h:mm a"
let time12 = df.string(from: date!)
这将导致
21 Feb 2020 6:00 PM
现在,问题是,您可以做
let df = DateFormatter()
df.dateFormat = "d MMM yyyy h:mm a"
df.string(from: Date())
并获得相同的结果。
请记住,Date
本身并没有“格式”的概念,超出了其“调试”输出所提供的范围,因此您不能更改Date
的格式,而是使用格式化程序以某种易于理解的形式“表示” Date
的值。
答案 2 :(得分:1)
试试这个:
let date : "2021-01-20T21:40:59.416Z"
func setDate(date: String) -> String {
var interval: Double = 0
let convertedDate = date.components(separatedBy: ":")
for (index, part) in convertedDate.reversed().enumerated() {
interval += (Double(part) ?? 0) * pow(Double(60), Double(index))
}
let date = Date(timeIntervalSinceNow: interval)
let formatter = Foundation.DateFormatter()
formatter.dateFormat = "LLLL dd, HH:mm at"
return formatter.string(from: date)}
这将返回此格式的日期 -->“1 月 21 日上午 05:30”
答案 3 :(得分:0)
尝试
let str = "2020-02-21 06:07:21 +0000"
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-mm-dd hh:mm:ss zzz"
if let date = formatter.date(from: str) {
formatter.dateFormat = "dd MMM yyyy hh:mm a"
let formattedDate = formatter.string(from: date)
print(formattedDate)
}
答案 4 :(得分:0)
迅速,这个答案对我有帮助
swift - how to convert date from am/pm to 24 hour format
//也将我的作品发布在这里。
let df = DateFormatter()
df.dateFormat = "d MMM yyyy h:mm a"
let time12 = df.string(from: Date())
print(time12)