我有一个日历用于选择日期:
<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.为什么会发生这种情况?
答案 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