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

如何不借助指定时间从DateFormatter获取本地化AM/PM字符串?

获取本地化AM/PM字符串(无需指定自定义时间)

当然可以实现,核心思路是给DateFormatter传入固定属于AM/PM时段的时间点,就能直接拿到对应locale下的本地化字符串,不用依赖自定义的日期。

具体实现代码

首先配置格式化器:

let locale = Locale(identifier: "en-us")
let formatter = DateFormatter()
formatter.locale = locale
formatter.dateFormat = "a"

然后用固定时间点获取两个变体:

// 2001年1月1日00:00:00,属于AM时段
let amString = formatter.string(from: Date(timeIntervalSinceReferenceDate: 0))
// 2001年1月1日12:00:00,属于PM时段
let pmString = formatter.string(from: Date(timeIntervalSinceReferenceDate: 43200))

print(amString) // 输出 "am"
print(pmString) // 输出 "pm"

更直观的构造方式

如果觉得固定时间戳不够直观,也可以用Calendar来构造当天的0点和12点:

let calendar = Calendar.current
calendar.locale = locale

// 当天起始时间(0点,AM)
let amDate = calendar.startOfDay(for: Date())
// 当天12点(PM)
let pmDate = calendar.date(bySettingHour: 12, minute: 0, second: 0, of: amDate)!

let amString = formatter.string(from: amDate)
let pmString = formatter.string(from: pmDate)

不管用哪种方式,只要传入的日期明确属于AM或PM时段,DateFormatter就会根据设置的区域输出对应的本地化字符串,完全不需要指定自定义的时间参数。

内容的提问来源于stack exchange,提问作者Martin Perry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:33:21