私はUILateに接続しているUIDatePickerを持っています。私は18歳以上の誕生日(年齢制限)を選択するようにします。だから私は、maximumDate
値を設定するには、この行います日付ピッカーは、選択したときとは異なる日付(1日間)を表示します
datePicker.maximumDate = NSCalendar.currentCalendar().dateByAddingUnit(.Year, value: -18, toDate: NSDate(), options: [])
この行は、しかし、ピッカーが選択した日付の後ろの1日を表示するようになります。たとえば、ピッカーでSeptember 27, 1956
を選択した場合、ラベルにはSeptember 26, 1956
と表示されます。NSDate()
と、ローカルタイムゾーンの後ろにある別のタイムゾーンを使用していると考えられます。
switch dequeueFrom[indexPath.row] {
case .Birthday:
if let pickedBday = pickedBday,
let bday = NSDate.dateFromISOString(pickedBday) {
(cell as! RegisterTextFieldCell).content(bday.longFormattedString())
}
// dateFromISOSString is declared in an extension.swift
class func dateFromComponents(components: NSDateComponents) -> NSDate? {
let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)
return calendar?.dateFromComponents(components)
}
class func dateFromString(string: String) -> NSDate? {
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss-SSS"
if let stringDate = dateFormatter.dateFromString(string) {
return stringDate
} else {
return nil
}
}
func ISOStringFromDate() -> String {
let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
return dateFormatter.stringFromDate(self).stringByAppendingString("Z")
}
class func dateFromISOString(string: String) -> NSDate? {
let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
if let stringDate = dateFormatter.dateFromString(string) {
return stringDate
} else {
return nil
}
}
私は問題の背後に、この1日が離れて行くことができるようにNSDateは()私のローカルタイムゾーンも作ることができる方法で任意のヘルプ?任意のヘルプは非常に高く評価されています:)
あなたはあなたの質問は、該当するコードを更新する必要があります。 – rmaddy
@rmaddy関連するコードはどういう意味ですか?これはdatePickerの「年齢制限」を設定している1行です – ioskaveen
ラベルを設定するコードは、問題が発生している場所であるため、すばらしいスタートになります。 – rmaddy