NSDateFormatter:使用具有相对格式的自定义格式

att*_*cal 7 cocoa cocoa-touch ios swift

我试图以NSDate一种形式格式化s,它在适用的时候使用相对格式,而在不使用的时候是星期几:"今天","明天","星期日","星期一",......

问题是,NSDateFormatter"S doesRelativeFormatting使用时只适用dateStyle,而不是用dateFormat.(基本上,我需要dateFormat = "EEEE"明天后的所有功能.)

目前,我正在使用以下代码:

let dateFormatter = NSDateFormatter()
dateFormatter.timeStyle = .NoStyle
dateFormatter.dateStyle = .FullStyle
dateFormatter.doesRelativeDateFormatting = true

let dateString = dateFormatter.stringFromDate(theDate)
return dateString.componentsSeparatedByString(" ")[0]
Run Code Online (Sandbox Code Playgroud)

这恰好恰好在我的特定区域工作,其NSDateFormatterStyle.FullStyle输出类似于"2015年8月23日星期日",但显然这不是一个好的或一般的解决方案.

我发现的最接近的问题就是这个问题,但对于我的用例来说似乎不必要的复杂,如果可能的话,我想要更优雅的东西.

谢谢!

poi*_*tum 7

我使用3个日期格式化程序:

  1. dateStyle = .FullStyledoesRelativeDateFormatting = true
  2. dateStyle = .FullStyledoesRelativeDateFormatting = false
  3. dateFormat = "EEEE"doesRelativeDateFormatting = false

获取1和2的格式化字符串.如果它们不同,则使用1中的字符串.如果它们相同,则获取并使用3中的字符串.

这应该对所有语言环境都可靠地工作.出于性能原因,请确保保留所有3个格式化程序,而不是每次都重新创建它们.