如何设置DateComponentFormatter除当前以外的本地?

时间:2017-11-13 11:28:06

标签: swift nsdate nsdatecomponentsformatter

场合

我有一个函数使用DateComponentFormatter的函数fun string(from: Date, to: Date)根据两个日期之间的时间差返回格式化的字符串,并且它完美地运行。但是我想以英文返回这个格式化的字符串(目前根据设备本地格式化)。

问题

如何设置DateComponentFormatter本地内容,就像使用DateFormatter一样?如果你不能,你将如何进行?

代码:

import Foundation

func returnRemainingTimeAsString(currentDate: Date, nextDate: Date)->String {

  let dateComponentsFormatter = DateComponentsFormatter()
  dateComponentsFormatter.unitsStyle = DateComponentsFormatter.UnitsStyle.full
  dateComponentsFormatter.allowedUnits = [.day, .hour, .minute, .second]
  dateComponentsFormatter.maximumUnitCount = 1

  let differenceAsString = dateComponentsFormatter.string(from: currentDate, to: nextDate)!

  return differenceAsString
}

let currentDate = Date()
let futureDate = currentDate.addingTimeInterval(3604)
returnRemainingTimeAsString(currentDate: currentDate, nextDate: futureDate)

// prints 1 hour (if devices local is English) or 1 hora (if Spanish),
// and I want it to return always 1 hour.

2 个答案:

答案 0 :(得分:2)

DateComponentsFormatter具有calendar属性。

获取当前日历,设置其区域设置并将日历分配给格式化程序。

let dateComponentsFormatter = DateComponentsFormatter()
var calendar = Calendar.current
calendar.locale = Locale(identifier: "en_US_POSIX")
dateComponentsFormatter.calendar = calendar
dateComponentsFormatter.unitsStyle = .full
...

答案 1 :(得分:0)

要使格式化程序显示本地化字符串,您必须在目标设置中指定支持的区域设置。

enter image description here

如果设备的当前区域设置是目标设置中支持的区域设置之一,您将获得本地化的日期组件,而无需手动设置格式化程序的calendar。如果您需要设备当前区域设置以外的区域设置,则只需执行此操作。