You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:23:32