从Int组件创建NSDate

时间:2015-07-05 17:04:20

标签: ios swift

我有一个日历用于选择日期:

<md-content>
 <md-card ng-repeat="x in courses">
  <md-card-content layout="row" layout-align="start center" layout-padding>
    <img ng-src="/assets/course_images/{{x.image_name}}" 
      class="md-avatar" alt=""
         ng-click=''>
      <md-button class="md-primary" ng-click=''>
          {{x.course_name}}, {{x.course_address}}
      </md-button>       
   </md-card-content>
 </md-card>
</md-content>

当我提供&#34; date&#34;在这种方法中:

func SACalendarDate(calendar: SACalendar!, didSelectDate day: Int32, month: Int32, year: Int32) {
    var date = Date.from(year: Int(year), month: Int(month), day: Int(day))

    print("\(year) and \(month) and \(day)")

    let formatter = NSDateFormatter()
    formatter.dateStyle = NSDateFormatterStyle.MediumStyle
    formatter.timeStyle = NSDateFormatterStyle.NoStyle
    let dateString = formatter.stringFromDate(date)

    buttonSelectDates.setTitle("\(dateString)", forState: UIControlState.Normal)
    getUsers(date)
}

我得到的日期落后一天:selectedDate:2015-07-14 22:00:00 +0000 参数是:2015,7和15.为什么会发生这种情况?

1 个答案:

答案 0 :(得分:3)

NSDate只是一个单独的时间点,表示为自1970年1月1日以来的秒数,它不关心时区或任何事物 - 它的“时区”是GMT并且是+0000(没有偏移)。如果您使用本地时区从日历创建NSDate,例如+0200,则该时区偏移将取消您提供的实际日期,以表示没有任何时区的时间点。要获得NSDate的可读日期表示,您需要使用知道您当前时区的NSDateFormatter

let date = from(2015, month: 7, day: 15)
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"

print(dateFormatter.stringFromDate(date))
print(date)

您将收到以下打印输出:

  

2015-07-15 00:00:00 +0200
  2015-07-14 22:00:00 +0000