创建 NSDate 并设置 AM 或 PM

Creating an NSDate and setting AM or PM

过去 4 小时我一直在努力解决这个问题,但似乎无法弄清楚如何解决这个问题。用户进入应用程序并 select 在日历上输入日期。 selected 日期只是一个 NSDate。然后用户可以选择一个由 hoursminutesseconds 组成的时间,然后他们可以 select AMPM

假设用户选择了 6:57 PM 的时间。我需要修改他们在日历上 select 编辑日期时创建的原始 NSDate,并更改它的时间数据以匹配用户刚刚设置的 6:57 PM 时间。

我一直在使用 NSCalendar class 的 dateBySettingHour 功能,效果很好。唯一的问题是我无法修改 AM/PM 值。我所能做的就是传递它的小时、分钟和秒数。这是代码:

calendar.dateBySettingHour(hours, minute: minutes, second: seconds, ofDate: selectedDate, options: NSCalendarOptions())

我一直在研究 NSDateFormatterNSDateComponentsNSCalendar,并一直在研究这里的示例,但我似乎无法理解这一点,并且搞清楚。

对我来说,以 ISO 8601 日期格式创建最终日期的最简单、最有效的方法是什么?现在还有正确的时间信息,包括用户选择的 AM/PM 设置?

我知道尝试使用 dateBySettingHour 是不可能的,但此时我愿意尝试任何事情。

你能为 PM 传递 "hours + 12" 吗?

Xcode 8.3.2 • Swift 3.1

let date = Date()
let hour = 6
let minute = 57
let second = 0
let pm = true

let hours24 = hour == 12 &&  pm ?   12 :
              hour == 12 && !pm ?    0 :
                            !pm ? hour : hour + 12

let dateWithHour = Calendar.current.date(bySettingHour: hours24, minute: minute, second: second, of: date)   // Jun 4, 2017, 6:57 PM"