在Swift 3中保存日期组件

时间:2016-12-26 12:11:03

标签: swift

我节省了时间。让我给你看一个截图,它会说明我在这里想要实现的目标。

Screenshot

我正在以Int保存一天,并从中创建一个新的日期,即处理。唯一缺少的是为该日期增加时间。如何在日期中保存AM或PM?

此外,这会影响在iPhone中使用24小时的用户吗?如果我节省下午9点他们的系统会知道我真的意味着21小时吗?

好的,我忘记了代码,这里是: 这是我正在安排通知的一段代码

let calendar = Calendar.autoupdatingCurrent

        guard let lastPeriod = RealmManager.sharedInstance.queryLastPeriod(), let predictionDate = lastPeriod.predictionDate else {
            return
        }

        let day = predictionDate.day - DefaultsManager.getNotificationDays()

        let newComponents = DateComponents(calendar: calendar, timeZone: .current, year: predictionDate.year, month: predictionDate.month, day: day, hour: time, minute: 0)

正如您所看到hour newComponents的一部分是棘手的。我只需要提供它是9AM,12AM或9PM。我怎么做? (顺便说一下。time只是Int我手动输入进行测试)

1 个答案:

答案 0 :(得分:0)

据我所知,你使用24小时的风格(还有什么?)。

let dc = DateComponents(year: 2016, month: 01, day: 11, hour: 14, minute: 20)
let d = Calendar.current.date(from: dc)
//> d: Date? = 2016-01-11 13:20:00 UTC

这是正确的,因为我当前的时区是CET(UTC + 1)。

您可以使用DateFormatter以不同格式打印日期。例如:

let df = DateFormatter()
df.dateStyle = DateFormatter.Style.short
df.timeStyle = DateFormatter.Style.short
df.string(from: d!)
//> R4: String = "11/01/16 14:20"

回到我的时区!

DateFormatter还有一个方法date(from: String),可用于解析日期:

df.date(from: "11/01/16 14:20")
//> R5: Date? = 2016-01-11 13:20:00 UTC

您必须使用Calendar和/或DateFormatter的设置才能获得12h风格的输出。在输入网站上,您只需将xxAM映射到Int("xx")!,将xxPM映射到12 + Int("xx")!