2016-11-11 59 views
0

我想今天的日期使用DateComponents转换:DateComponents给人错误的日期

let calendar = Calendar.current   
//add today's date 
var todayDate = Date() 
var dateComponents = calendar.dateComponents([.day, .month, .year], from: todayDate) 
dateComponents.timeZone = TimeZone.current 
todayDate = calendar.date(from: dateComponents)! 

在调试我发现,宣布todayDate之后,它的价值是2016-11-11 07:44:44 +0000。使用dateComponents后,该值更改为2016-11-10 18:30:00 +0000。而根据我的位置,这一天应该是11月11日,时间应该在1点到2点之间。这是为什么发生?

回答

0

您尚未在组件中指定时区,也未指定小时分秒。所以,所有这些值都假定为零。由此产生的时间在您指定的年份,月份和日期的格林尼治标准时间午夜时分。

当您打印结果时,您指定了当前时区,该时区显示为5小时30分钟不同。

我猜你在印度。

+0

我在上面指定了'dateComponents.timeZone = TimeZone.current'。让我尝试添加小时和分钟,然后再试一次 – StudentX

+0

添加.hour和.minute后,日期是正确的,但时间仍然是UTC。 – StudentX

+0

您也需要提取时区。没有单独设置。 –