创建 NSDate 并设置 AM 或 PM

Posted

技术标签:

【中文标题】创建 NSDate 并设置 AM 或 PM【英文标题】:Creating an NSDate and setting AM or PM 【发布时间】:2015-12-09 04:40:54 【问题描述】:

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

假设用户选择了6:57 PM 的时间。我需要修改他们在日历上选择日期时创建的原始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 是不可能的,但我现在愿意尝试任何事情。

【问题讨论】:

用户如何选择时间?用UIDatePicker?还是其他方式? 当用户选择 PM 时,为什么不将 12 小时加到小时? 【参考方案1】:

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"

【讨论】:

哇,我想该睡觉了,离开显示器【参考方案2】:

你可以为下午传递“小时 + 12”吗?

【讨论】:

虽然简短并作为一个问题陈述,但这个答案显然确实为 user3344977 提供了一个解决他的问题的解决方案 - 基本上与接受的答案相同的解决方案(已发布比这个答案晚一分钟)。

以上是关于创建 NSDate 并设置 AM 或 PM的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSDate 创建一个 6 小时的日期窗口

快速将 TimeString yyyy-mm-dd HH:mm:ss 转换为 NSDate 时间 HH:mm AM/PM [重复]

从字符串创建NSDate

NSDate小结

to_date 函数 AM PM 格式

如何检查 Cordova 应用程序是不是在 12 (AM/PM) 或 24 小时环境中运行