ios - iOS Swift 如何让 DateFormatter 在任何地区都没有年份?
问题描述
我想从两个日期创建一个日期字符串,格式如下:
"Apr 21 - Sep 17, 2018" - US
"21 Apr - 17 Sep, 2018" - Elsewhere
同时尊重本地日期格式(美国的 MMM dd,欧洲的 dd MMM 等)。
如何让 DateFormatter 给我默认样式但没有年份?
let startDateFormatter = DateFormatter()
// How to keep medium style but without year?
// this is the US style,
// I want locale-independent style to match the other date formatter
startDateFormatter.dateFormat = "MMM dd"
let endDateFormatter = DateFormatter()
endDateFormatter.dateStyle = .medium
endDateFormatter.timeStyle = .none
let startDateText = startDateFormatter.string(from: startDate)
let endDateText = endDateFormatter.string(from: endDate)
解决方案
使用DateIntervalFormatter
. 这旨在为您提供一个正确本地化的字符串,表示两个日期之间的日期间隔。
这是您的两个日期的示例:
// Test code for the two dates
let firstDate = Calendar.current.date(from: DateComponents(year: 2018, month: 4, day: 21))!
let lastDate = Calendar.current.date(from: DateComponents(year: 2018, month: 9, day: 17))!
let dif = DateIntervalFormatter()
dif.timeStyle = .none
dif.dateStyle = .medium
let dateInt = dif.string(from: firstDate, to: lastDate)
结果(美国):
2018 年 4 月 21 日 – 9 月 17 日
结果(英国):
2018 年 4 月 21 日至 9 月 17 日
如果您确实需要使用正确本地化DateFormatter
的特定dateFormat
内容(例如月份和日期,但没有年份),请使用setLocalizedDateFormatFromTemplate
.
let df = DateFormatter()
df.setLocalizedDateFormatFromTemplate("MMMdd")
let result = df.string(from: Date())
这将给出仅包含日期和缩写月份的正确本地化结果。
推荐阅读
- wpf - 将图标添加到带有样式的菜单中
- android - AndroidRuntime:java.lang.RuntimeException:无法实例化活动 ComponentInfo{.../....MainActivity}:java.lang.ClassNotFoundException:
- android - 自定义按钮 - 为什么带有 png 图像的 StateListDrawable 摆脱了默认按钮 StateListAnimator,而 xml 形状保留了它?
- python - setuptools 何时将可编辑链接安装到 /.../my_module/build/lib/ 以及何时链接到 /.../my_module?
- asp.net-mvc - IIS express 未运行 MVC 站点,未在 applicationhost.config 中创建站点
- ios - Swift iOS - 如何在单元格的 superView 中获取按钮框架
- php - `where in` 只取存储过程 mysql 中的第一个值
- android - 在 Android 中执行 oAuth 1.0 API
- javascript - Wordpress Owl Carousel 不显示自定义帖子类型
- node.js - 3.4版本的mongodb不区分大小写索引