swift - 创建 NSDate 并设置 AM 或 PM

标签 swift nsdate nsdateformatter nscalendar nsdatecomponents

过去 4 小时我一直在试图解决这个问题,但似乎不知道如何解决这个问题。用户进入应用程序并在日历上选择一个日期。所选日期只是一个NSDate。然后,用户可以选择由小时分钟组成的时间,然后他们可以选择AMPM

假设用户选择下午 6:57 的时间。我需要修改在日历上选择日期时创建的原始 NSDate ,并更改其时间数据以匹配用户刚刚的 6:57 PM 时间设置。

我一直在使用 NSCalendar 类的 dateBySettingHour 函数,它效果很好。唯一的问题是我无法修改 AM/PM 值。我所能做的就是度过几小时、几分钟、几秒钟。代码如下:

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

我一直在使用 NSDateFormatterNSDateComponentsNSCalendar 并浏览了这里的示例,但我就是看不出来让我全神贯注并找出答案。

对我来说,以 ISO 8601 日期格式创建最终日期并具有与原始 NSDate< 相同的正确月、日和年信息的最简单、最有效的方法是什么,但现在也有正确的时间信息,包括用户选择的 AM/PM 设置?

我知道尝试使用 dateBySettingHour 是不可能的,但我愿意在这一点上尝试任何事情。

最佳答案

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"

关于swift - 创建 NSDate 并设置 AM 或 PM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34170857/

相关文章:

ios - 在 Swift 中创建灵活的 API 类

iOS statusBar 背景在转换后变黑

swift - NSDateFormatter 的问题,使用 .dateFromString 时返回 nil

ios - Swift:将开始和结束日期格式化为单个字符串

ios - 如何为 iOS 9 设置 audioSession 类别?

swift - 如何在 Swift 中不更改父 NSMutableArray

iphone - 具有默认时区的 NSDateFormatter 给出的日期与 NSDate 描述方法不同

objective-c - 特定格式的 NSString 到 NSDate 转换

ios - 如何计算给定日期后剩余的天,时,分和秒?

swift - NSCalendarUnitDay 将当前日期显示为一位整数 int。如何将其变为 2 位数字,例如 "03"?