Date()和Calendar.dateComponents的日期不匹配

时间:2016-10-04 01:02:11

标签: ios swift

我正在尝试以特定格式(YYYYMMD)打印当前日期以获取AWS安全凭据,我注意到当我执行Date()时,该日是第4个正确值:< / p>

    let date = Date()
    print("\(date)")  //2016-10-04 00:56:28 +0000

现在,我想以我想要的格式打印日期,但我一直将日期值作为第3个:

    let calendar = Calendar.current
    let date = Date()
    let components = calendar.dateComponents([.day], from: date)
    print("\(components.day)")  //Optional(3)

S3期待日期为第4天。我怎样才能解决这个问题?

2 个答案:

答案 0 :(得分:2)

这是因为时区差异。 date将返回UTC时间和日期,但calendar将根据您设备的时区返回日期和时间。如果您需要UTC中的日期编号,请在创建后将日历对象的时区设置为UTC:

let calendar = Calendar.current
calendar.timeZone = TimeZone(abbreviation: "UTC")!

现在它将始终匹配Date()

返回的值

答案 1 :(得分:1)

使用

打印日期时
 print("\(date)")

您获得UTC的日期和时间,这可能不是您想要的。

如果要在当地时区显示日期,请创建日期格式化程序并使用:

let dateFormatter = NSdateFormatter()
let dateFormatter.dateStyle = .medium
let dateFormatter.timeStyle = .medium

let dateString = dateFormatter.StringFromDate(date)
print ("date = \(dateString)")

如果你经常这么做,你可能想在NSDate displayString上创建一个扩展,这样你就可以用它来显示你的日期,而不必编写额外的代码。