如何将API返回的阿拉伯格式日期转换为NSDate英文格式?
阿拉伯日期字符串转NSDate并转换为英文格式解决方案
没问题,我来帮你搞定这个日期转换的需求!首先我们先拆解API返回的日期字符串:الإثنين 2015.5.5 - 16:16 مساء بتوقيت ابوظبي,它的结构是:阿拉伯语完整星期名 + 年.月.日 + 24小时制时间 + 阿拉伯语时段标记 + 固定时区说明文本。
转换需要分两步走:先把阿拉伯日期字符串解析成NSDate(Swift里对应Date类型),再把这个日期对象格式化成你需要的英文日期字符串。
步骤1:解析阿拉伯日期字符串为NSDate
我们需要配置一个DateFormatter,让它能识别阿拉伯语的星期、时段,以及阿布扎比时区:
let arabicDateStr = "الإثنين 2015.5.5 - 16:16 مساء بتوقيت ابوظبي" // 初始化解析用的Formatter let inputFormatter = DateFormatter() // 设置阿拉伯语阿联酋区域,确保能识别阿拉伯星期和时段 inputFormatter.locale = Locale(identifier: "ar_AE") // 设置阿布扎比对应的时区(Asia/Dubai) inputFormatter.timeZone = TimeZone(identifier: "Asia/Dubai") // 匹配日期字符串的格式:完整星期 年.月.日 - 时:分 时段 固定文本 inputFormatter.dateFormat = "EEEE yyyy.M.d - HH:mm a 'بتوقيت ابوظبي'" // 解析为Date对象 guard let targetDate = inputFormatter.date(from: arabicDateStr) else { print("日期解析失败,请检查格式是否匹配") return }
步骤2:将NSDate转换为英文格式字符串
接下来用另一个DateFormatter,把targetDate转换成你需要的英文格式:
// 初始化输出用的Formatter let outputFormatter = DateFormatter() // 设置英文区域 outputFormatter.locale = Locale(identifier: "en_US_POSIX") // 可以保持阿布扎比时区,也可以改成UTC或其他时区 outputFormatter.timeZone = TimeZone(identifier: "Asia/Dubai") // 自定义你需要的英文格式,比如下面这个格式会输出类似 "Monday, May 05, 2015 16:16 Abu Dhabi Time" outputFormatter.dateFormat = "EEEE, MMMM dd, yyyy HH:mm 'Abu Dhabi Time'" // 生成英文日期字符串 let englishDateStr = outputFormatter.string(from: targetDate) print(englishDateStr)
关键注意点
- Locale设置:必须用
ar_AE才能正确识别阿拉伯语的星期(الإثنين对应星期一)和时段(مساء对应下午)。 - 时区配置:阿布扎比属于
Asia/Dubai时区,一定要设置这个,否则解析出来的时间会有偏差。 - DateFormat中的固定文本:
بتوقيت ابوظبي是固定的时区说明文字,要用单引号'包裹,告诉Formatter这部分不需要解析,直接匹配即可。 - 日期格式匹配:
yyyy.M.d可以兼容1位或2位的月/日(比如5.5或05.05),HH:mm对应24小时制时间,a对应阿拉伯语的时段标记。
内容的提问来源于stack exchange,提问作者A.M
相关产品推荐
相关产品推荐

