Невозможно отобразить календарь в правильном формате при выборе из UIDatePicker в Swift

У меня есть UIDatePicker, который отображает дату с использованием исламского календаря. DatePicker отображает значения в правильном формате. Однако, когда я назначаю выбор пользователей UITextField, он, к сожалению, отображает эквивалентную дату в формате григорианского календаря. Как я могу изменить это, чтобы он отображал эквивалент исламского календаря?

Вот соответствующий код:

//The below code is what displays the dates from the Islamic calendar in the UIDatePicker (and works correctly):
let islamicCalendar = NSCalendar.init(calendarIdentifier: NSCalendarIdentifierIslamic)
let components: NSDateComponents = NSDateComponents()
components.calendar = islamicCalendar
components.year = 10
let currentDate = NSDate()
let maxDate: NSDate = islamicCalendar!.dateByAddingComponents(components, toDate: currentDate, options: [])!
self.datePicker?.calendar = islamicCalendar
self.datePicker?.minimumDate = NSDate()
self.datePicker?.maximumDate = maxDate

Это блок кода, который преобразует выбор пользователя и присваивает его соответствующему UITextField:

var selectedDate: String = String()
selectedDate = self.dateformatterDateTime(self.datePicker!.date) as String
myTextField.text = selectedDate

func dateformatterDateTime(date: NSDate) -> NSString {
    let dateFormatter: NSDateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "dd-MM-yyyy"
    return dateFormatter.stringFromDate(date)

 }

person syedfa    schedule 14.07.2016    source источник
comment
можете ли вы проверить, как вы инициировали dateformatterDateTime, не могли бы вы опубликовать это заявление здесь.   -  person Jeet    schedule 14.07.2016
comment
Прошу прощения, код обновлен.   -  person syedfa    schedule 14.07.2016
comment
Нет, я имею в виду, где вы это заявили? Возможно, вы объявили это где-то вроде var dateFormatterDateTime = DateTimeformatter примерно так.   -  person Jeet    schedule 14.07.2016
comment
Спасибо теперь имеет смысл.   -  person Jeet    schedule 14.07.2016


Ответы (2)


Вы должны либо преобразовать выбранную дату в исламскую дату в своем методе func dateformatterDateTime(date: NSDate) -> NSString, либо отправить этому методу преобразованную дату. Вы можете сделать это так -

var selectedDate: String = String()

var date  = (islamicCalendar?.date(byAdding:components, to:    self.datePicker!.date, options: []))!

selectedDate = self.dateformatterDateTime(date) as String
myTextField.text = selectedDate

func dateformatterDateTime(date: NSDate) -> NSString {
   let dateFormatter: NSDateFormatter = NSDateFormatter()
   dateFormatter.dateFormat = "dd-MM-yyyy"
   return dateFormatter.stringFromDate(date)
}

or -

func dateformatterDateTime(date: Date) -> NSString {
   let dateFormatter: DateFormatter = DateFormatter()

   dateFormatter.dateFormat = "dd-MM-yyyy"

   var dateToSendBack = (islamicCalendar?.date(byAdding:components, to:  date, options: []))!
   return dateFormatter.string(from: dateToSendBack)
}
person Jeet    schedule 14.07.2016
comment
Я все еще возвращаюсь к версии григорианского календаря. - person syedfa; 14.07.2016
comment
Хорошо, можете ли вы поделиться кодом через github или что-то подобное, чтобы я мог посмотреть и вернуться. - person Jeet; 14.07.2016

попробуй это,

let picker = UIDatePicker(frame: CGRect(x: 0, y: 30, width: 0, height: 0))

picker.datePickerMode = .date
picker.date = Date()
picker.calendar = Calendar(identifier: .islamicUmmAlQura)
picker.autoresizingMask = UIViewAutoresizing.flexibleRightMargin
picker.frame.size.width = 300
view.addSubview(picker)
person KAR    schedule 15.11.2016