Hijri(伊斯兰)日历在swiftالتاريخالهجري

Abd*_*oor 10 ios hijri swift

有谁可以帮助我吗

我正在尝试使用Swift语言创建一个IOS应用程序,我需要使用Hijri(伊斯兰)日历

我尝试了很多次但是我失败了:(

这是我的尝试

    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)
Run Code Online (Sandbox Code Playgroud)

并且输出错误

   2576-04-25 09:05:08 +0000
Run Code Online (Sandbox Code Playgroud)

我们在1434年在hijri而不是2576年!

Gri*_*mxn 11

你正在混合日历,日期和组件:

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
Run Code Online (Sandbox Code Playgroud)

你需要做的只是:

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"
Run Code Online (Sandbox Code Playgroud)

要获取格式化的字符串,而不仅仅是整数组件,您需要使用NSDateFormatter,这将允许您指定日历和日期以及格式.看到这里.

更新

简单地将数字音译为(东方)阿拉伯数字(因为0 ... 9被称为(西方)阿拉伯数字以区别于罗马数字),根据要求,您可以使用:

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)")
Run Code Online (Sandbox Code Playgroud)


m.a*_*adi 6

获取朝j日期:

斯威夫特:

 let dateFor = DateFormatter()

 var hijriCalendar = Calendar.init(identifier: Calendar.Identifier.islamicCivil)
 dateFor.locale = Locale.init(identifier: "ar") // or "en" as you want to show numbers

 dateFor.calendar = hijriCalendar

 dateFor.dateFormat = "dd/mm/yyyy"
 print(dateFor.string(from: Date()))) 
Run Code Online (Sandbox Code Playgroud)

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]];
Run Code Online (Sandbox Code Playgroud)