Hijri(伊斯兰)日历在swiftالتاريخالهجري [英] Hijri (islamic) calendar in swift التاريخ الهجري
问题描述
有人可以帮我吗
我正在尝试使用Swift语言创建一个IOS应用程序,我需要使用Hijri(伊斯兰)日历
I'm trying to create an IOS app using Swift language and I need to use Hijri (islamic) calendar
我尝试了很多次但是我失败了:(
I tried many time but I failed :(
这是我的尝试
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年的hijri不是2576!
We are in year 1434 in hijri not 2576 !
推荐答案
你正在混合日历,日期和组件:
You're mixing up the calendars, dates & 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
您需要做的只是:
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
,它允许您指定日历和&日期以及格式。请参见此处。
To get a formatted string, rather than just the integer components, you need to use NSDateFormatter
, which will allow you to specify the calendar & date as well as the format. See here.
更新
简单地将数字音译为(东方)阿拉伯数字(作为0 ... 9被称为(西方)阿拉伯数字以区分它们例如,根据要求,你可以使用:
To simply transliterate the numerals to (Eastern) Arabic numerals (as 0...9 are referred to as (Western) Arabic numerals to distinguish them from, say, Roman numerals), as requested, you could 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)")
这篇关于Hijri(伊斯兰)日历在swiftالتاريخالهجري的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!