swift - 如何将日期从上午/下午转换为 24 小时格式
Posted
技术标签:
【中文标题】swift - 如何将日期从上午/下午转换为 24 小时格式【英文标题】:swift - how to convert date from am/pm to 24 hour format 【发布时间】:2018-03-21 05:32:24 【问题描述】:事情就是这样。 我的 iPhone 是 am/pm 格式,iPhone 语言是西班牙语 (MX)。 当我询问日期时,我得到类似 2018-03-21 5:14:59 a 的信息。米。 +0000 它是一个日期类型,然后我尝试将其转换为 24 小时格式的字符串,我得到类似 2018-03-20 23:14:59 的内容,它是一个字符串类型,但是当我尝试将该字符串转换为日期,我再次以上午/下午格式获得相同的日期 2018-03-21 5:14:59 a。米。 +0000 我不知道还能做什么,我想要的只是将我的上午/下午日期转换为 24 小时日期而不是字符串。 请帮帮我。 这是我在 Swift 4 中的代码
let todayDate = Date()
print("todayDate: \(todayDate)")
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd' 'HH:mm:ss"
let stringDate = dateFormatter.string(from: todayDate)
print("stringDate: \(stringDate)")
let dateFromString = dateFormatter.date(from: stringDate)
print("dateFromString: \(dateFromString!)\n\n\n")
这是我的控制台结果
todayDate: 2018-03-21 5:14:59 a. m. +0000
stringDate: 2018-03-20 23:14:59
dateFromString: 2018-03-21 5:14:59 a. m. +0000
【问题讨论】:
github.com/melvitax/DateHelperDate
对象没有格式的内部概念,它只是从锚点开始的一段时间的容器。 dateFromString
只是打印了description
的Date
s 实现,您需要将Date
值再次格式化回String
你想为哪个国家做?你的国家是什么?
没有理由去做你想做的事。您的 Date
对象就可以了。当您在 Date
对象上使用 print
时,不要担心它的外观。仅当您真正希望使用 DateFormatter
将日期显示为 String
时才担心输出。
我在数据库(领域)中有一个 initDate 和一个 finishDate,我试图验证 todayDate 是否在该范围内。但是领域中的日期采用 24 小时格式,而当 todayDate 采用 AM/PM 格式时,我无法比较这些日期。当 todatDate 是 24 小时格式时,一切都很好。
【参考方案1】:
我想要的只是将我的上午/下午日期转换为 24 小时日期而不是字符串
Date
不是这样工作的。
From the Documentation
日期值表示相对于绝对参考日期的时间间隔。
Date
只是一个容器,用于表示自参考日期以来的一段时间,它本身不携带任何格式信息。
let dateFromString = dateFormatter.date(from: stringDate)
print("dateFromString: \(dateFromString!)\n\n\n")
只是将stringDate
(在您的示例中为2018-03-20 23:14:59
)转换回Date
对象,print
正在使用Date
s description
实现为您提供有关其当前值的信息
所以,如果我们改为添加...
print("dateFromString: \(dateFormatter.string(from: dateFromString!))\n\n\n")
它将打印2018-03-21 16:44:17
你最好的选择是不在乎。只需在 Date
对象中携带值并将其格式化为 String
,当您需要将其显示给用户或需要对其进行格式化时 - 这就是使用格式化程序的重点
【讨论】:
以上是关于swift - 如何将日期从上午/下午转换为 24 小时格式的主要内容,如果未能解决你的问题,请参考以下文章