Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 希吉里(伊斯兰)日历,swift和#x627لتاريخالهجري;_Ios_Swift_Hijri - Fatal编程技术网

Ios 希吉里(伊斯兰)日历,swift和#x627لتاريخالهجري;

Ios 希吉里(伊斯兰)日历,swift和#x627لتاريخالهجري;,ios,swift,hijri,Ios,Swift,Hijri,有人能帮我吗 我正在尝试使用Swift语言创建IOS应用程序,我需要使用Hijri(伊斯兰)日历 我试了很多次,但都失败了:( 这是我的尝试 let datenow = NSDate() let calendar = NSCalendar.currentCalendar() let components = calendar.components(NSCalendarUnit(UInt.max), fromDate: datenow) var gregorian

有人能帮我吗

我正在尝试使用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)
输出是错误的

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

我们是在公元1434年,而不是公元2576年!

你把日历、日期和组件搞混了:

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
您需要做的只是:

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"
要获取格式化字符串,而不仅仅是整数组件,您需要使用
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)")

谢谢@Grimxn,我还找到了一种显示阿拉伯数字的好方法

    let formatter = NSNumberFormatter()
    formatter.locale = NSLocale(localeIdentifier: "ar_SA")

    var date:String = "\(formatter.stringFromNumber(components.year))-\(formatter.stringFromNumber(components.month))-\(formatter.stringFromNumber(components.day))"
它将打印哈吉日期:

Swift:

 let dateFor = DateFormatter()

 let 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()))
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]];
Obj-C:

 let dateFor = DateFormatter()

 let 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()))
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]];

Swift 3&4

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()))")
从以下位置查找并放置日期格式:

Swift 5:
让hijriCalendar=日历(标识符:.islamicCivil)
let formatter=DateFormatter()
formatter.locale=locale(标识符:“ar”)
formatter.calendar=hijriCalendar
formatter.dateFormat=“dd/MM/yyyy”
打印(formatter.string(from:Date()))

你告诉它,我们是在2014年的hijri,这是几百年后的未来,显然是在公元2576年。斯威夫特是绝对正确的;你的代码是错误的。感谢你解释说,要想让我工作得很好但很热,我可以用阿拉伯方式打印intger,像٠٩/٠٠/١٤٣٤打印阿拉伯数字很容易(月名更难打印)-只需使用1…9将其作为字符串,然后使用字符替换将1替换为阿拉伯语1,等等。根据要求添加了音译。很抱歉花了一整天的时间,我一直在工作!谢谢Grimxn,我还找到了一种显示阿拉伯数字的好方法让formatter=NSNumberFormatter()formatter.locale=NSLocale(localeIdentifier:“ar_SA”)变量日期:String=“(formatter.stringFromNumber(components.year))-(formatter.stringFromNumber(components.month))-(formatter.stringFromNumber(components.day))”它将打印出١-١-١-٤٣٤@AbdulazizNoor-这真的很好-比我的hack好。你应该将其作为答案而不是评论发布。请添加更多关于你的答案的描述和/或信息,以及它如何解决所问问题,以便其他人可以轻松理解,而无需要求澄清