Swift DateIntervalFormatter:即使间隔跨越多天,也要将日期保留在字符串之外

Swift DateIntervalFormatter:即使间隔跨越多天,也要将日期保留在字符串之外,swift,date-formatting,Swift,Date Formatting,我正在尝试设置时间间隔的格式。我希望得到如下结果: 10:45 - 12:00 AM 我可以使用DateInvervalFormatter非常接近这一点: let cal = Calendar.current let formatter = DateIntervalFormatter() formatter.dateStyle = .none formatter.timeStyle = .short let start = Date() let end = cal.date(byAdding:

我正在尝试设置时间间隔的格式。我希望得到如下结果:

10:45 - 12:00 AM
我可以使用
DateInvervalFormatter
非常接近这一点:

let cal = Calendar.current
let formatter = DateIntervalFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .short
let start = Date()
let end = cal.date(byAdding: .hour, value: 1, to: start)
formatter.string(from: DateInterval(start: start, end: end!))
上述(在en_US语言环境中)将产生如下输出:

5:27 – 6:27 PM
看起来不错吧?但是,如果间隔中的两个日期在不同的日期,则此操作不起作用。例如:

let formatter = DateIntervalFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .short
let startComponents = DateComponents(year: 2020, month: 1, day: 1, hour: 23, minute: 45)
let start = cal.date(from: startComponents)
let end = cal.date(byAdding: .hour, value: 1, to: start!)
formatter.string(from: DateInterval(start: start!, end: end!))
尽管将
dateStyle
设置为
.none
,但在上述示例中生成的字符串(在en_US语言环境中)为:

我想要的是:

11:45 PM – 12:45 AM

我怎么能得到这个?我知道我可以使用<代码> DateFormatter <代码>将每个日期(开始和结束)格式化为一个时间,然后将中间的两个字符串加上连字符(<代码> ->代码>),但这不一定是本地化友好的。

< P>我最后得出的是:

延期日期{
func格式时间间隔(
截止日期:,
时区:时区=.autoupdateCurrent
)->字符串{
let formatter=DateIntervalFormatter()
formatter.timeZone=时区
formatter.timeStyle=.short
formatter.dateStyle=.none
//我们需要手动剥离任何“日期”元数据,因为对于某些地区,
//即使我们设置了'formatter.dateStyle=.none',如果日期在两个不同的日期
//我们仍将在最终结果中获得日期信息(例如,对于美国地区)
让calendar=calendar.current
让fromComponents=calendar.dateComponents([.hour、.minute、.second],from:self)
让toComponents=calendar.dateComponents([.hour、.minute、.second],from:to)
让fromDate=calendar.date(from:fromComponents)!
让toDate=calendar.date(从:到组件)!
返回格式化程序.string(from:fromDate,to:toDate)
}
}
但是,如果间隔日期在不同的月份(例如8月31日至9月1日),它会添加一个从第1年开始的日期,类似于

1/1/1,晚上11:45 – 1月2日凌晨12:45


仍然没有干净的解决方案…

我不知道使用日期格式化程序方法时本地化有什么问题。@LeoDabus使用日期格式化程序可能没有什么问题,但我肯定不是所有地区的专家,并假设可能有一些地区不使用连字符。苹果已经在DateIntervalFormatter中完成了所有艰苦的本地化工作,我想深入了解一下。我不认为他们会显示两个不同日期的日期间隔,只显示时间戳!但也许有一种方法——这就是我的问题。奇怪的是,如果给定
日期样式
,它们仍然显示日期。。。这似乎是实现我想要的目标的合乎逻辑的方式。我认为,你现在得到的是实现这一目标的合乎逻辑的方式,因为没有日期,就不可能正确解释信息
11:45 PM – 12:45 AM