Hijri (Islamic) calendar in fast التاريخ الهجري

can someone help me please

I am trying to create an iOS application using Swift language and I need to use the Hijri calendar (Islamic)

I tried many times, but I could not :(

this is my attempt

let datenow = NSDate() let calendar = NSCalendar.currentCalendar() let components = calendar.components(NSCalendarUnit(UInt.max), fromDate: datenow) var gregorian = NSCalendar(identifier:NSIslamicCivilCalendar) var date = gregorian.dateFromComponents(components) println(date) 

and wrong conclusion

  2576-04-25 09:05:08 +0000 

We are located in 1434 in Hijri not 2576!

+5
source share
4 answers

You mix calendars, dates, and components:

 let datenow = NSDate() // This is a point in time, independent of calendars let calendar = NSCalendar.currentCalendar() // System calendar, likely Gregorian let components = calendar.components(NSCalendarUnit(UInt.max), fromDate: datenow) // Gregorian components println("\(components.year)") // "2014" var islamic = NSCalendar(identifier:NSIslamicCivilCalendar)! // Changed the variable name // *** Note also NSCalendar(identifier:) now returns now returns an optional *** var date = islamic.dateFromComponents(components) // so you have asked to initialise the date as AH 2014 println(date) // This is a point in time again, sometime in AH 2014, or AD 2576 

What you need to do is simply:

 let datenow = NSDate() let islamic = NSCalendar(identifier:NSIslamicCivilCalendar)! let components = islamic.components(NSCalendarUnit(UInt.max), fromDate: datenow) println("Date in system calendar:\(datenow), in Hijri:\(components.year)-\(components.month)-\(components.day)") //"Date in system calendar:2014-09-25 09:53:00 +0000, in Hijri:1435-11-30" 

To get a formatted string, and not just whole components, you need to use NSDateFormatter , which allows you to specify the calendar and date, as well as the format. See here .

Update

To simply transliterate the numbers (eastern) Arabic numbers (since 0 ... 9 are called (western) Arabic numbers to distinguish them from, say, Roman numbers), in accordance with the request, you can use:

 let sWesternArabic = "\(components.day)-\(components.month)-\(components.year)" let substituteEasternArabic = ["0":"٠", "1":"١", "2":"٢", "3":"٣", "4":"٤", "5":"٥", "6":"٦", "7":"٧", "8":"٨", "9":"٩"] var sEasternArabic = "" for i in sWesternArabic { if let subs = substituteEasternArabic[String(i)] { // String(i) needed as i is a character sEasternArabic += subs } else { sEasternArabic += String(i) } } println("Western Arabic numerals = \(sWesternArabic), Eastern Arabic numerals = \(sEasternArabic)") 
+9
source

thanks @Grimxn and I also found a great way to show Arabic numbers

  let formatter = NSNumberFormatter() formatter.locale = NSLocale(localeIdentifier: "ar_SA") var date:String = "\(formatter.stringFromNumber(components.year))-\(formatter.stringFromNumber(components.month))-\(formatter.stringFromNumber(components.day))" 

he will print 1-11-1434

+3
source

Receive Haji Date:

Swift:

  let dateFor = DateFormatter() var hijriCalendar = Calendar.init(identifier: Calendar.Identifier.islamicCivil) dateFor.locale = Locale.init(identifier: "ar_SA") // or "en" as you want to show numbers dateFor.calendar = hijriCalendar dateFor.dateFormat = "dd/mm/yyyy" print(dateFor.string(from: Date()))) 

Obj-C:

 NSCalendar *hijriCalendar2 = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierIslamicCivil]; NSDateFormatter * lastDate = [[NSDateFormatter alloc]init]; lastDate.calendar = hijriCalendar2; [lastDate setDateFormat:@"dd/MM/yyyy HH:mm:ss"]; NSString * dateString = [lastDate stringFromDate:[NSDate date]]; 
+2
source

Swift 3

 let dateNow = DateFormatter() let islamicCalendar = Calendar.init(identifier: Calendar.Identifier.islamicCivil) dateNow.calendar = islamicCalendar dateNow.locale = Locale.init(identifier: "ar_SA") // This is used to show numbers, day and month in arabic letters dateNow.dateFormat = "EEE dd MMM yyyy" print("\(dateNow.string(from: Date()))") 

find out and specify the date format: http://userguide.icu-project.org/formatparse/datetime

+1
source

Source: https://habr.com/ru/post/1203373/


All Articles