如何不借助指定时间从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
相关产品推荐
相关产品推荐

