我有一个日期“2014-07-02 20:57:38 +0000”,我想将其格式化为“今天晚上8:57”。 我希望如果一个字符串是昨天,然后将其显示为“昨天上午9:00”。如果它既不是今天也不是昨天,只需显示实际日期,如“27/6 at 7:53 pm”。
我能够通过下面的代码获得“8:57 AM”等格式的时间。
var formatter : NSDateFormatter = NSDateFormatter()
formatter.dateFormat = "h:mm a"
// message.createdAt is the date
let dateString = formatter.stringFromDate(message.createdAt)
println(dateString)
//output = 8:57 AM
但是,当我使用以下代码时,它会返回一个空白字符串。
var formatter : NSDateFormatter = NSDateFormatter()
formatter.dateFormat = "h:mm a"
formatter.doesRelativeDateFormatting = true //<-- This doesn't work
let dateString = formatter.stringFromDate(message.createdAt)
println(dateString)
//output = (nothing, its a blank string)
如何使这项工作在Swift中显示“今天”或“昨天”?
答案 0 :(得分:26)
它是空白的原因是您的日期格式只有时间组件。结合.doesRelativeDateFormatting
,为您提供空字符串。如果您想要这种自定义时间格式,我认为您需要单独的格式化日期和时间:
let now = NSDate()
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .MediumStyle
dateFormatter.doesRelativeDateFormatting = true
let timeFormatter = NSDateFormatter()
timeFormatter.dateFormat = "h:mm a"
let time = "\(dateFormatter.stringFromDate(now)), \(timeFormatter.stringFromDate(now))"
println(time) // prints "Today, 5:10 PM"
答案 1 :(得分:10)
使用Swift 3,Apple Developer API Reference说明了DateFormatter
的{{3}}属性:
在使用固定格式表示时,您应该只设置此属性,如
dateFormat
中所述。对于用户可见的表示形式,如果使用预定义的样式无法实现所需的格式,则应使用Working With Fixed Format Date Representations和dateStyle属性或timeStyle方法;这两个属性和此方法都提供了适合显示给用户的本地化日期表示。
DateFormatter
setLocalizedDateFormatFromTemplate(_:)属性具有以下声明:
接收器的日期样式。
var dateStyle: DateFormatter.Style { get set }
同样,DateFormatter
dateStyle
属性具有以下声明:
接收器的时间风格。
var timeStyle: DateFormatter.Style { get set }
请注意,DateFormatter.Style
是包含以下案例的枚举:none
,short
,medium
,long
,full
。
另请注意,timeStyle
仅在您为dateStyle
个实例设置timeStyle
和/或DateFormatter
时才有效。
以下操场代码显示如何使用DateFormatter
dateStyle
和timeStyle
属性以所需格式显示日期。
import Foundation
let now = Date() // 2017-03-12 14:53:34 +0000
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: now)! // 2017-03-11 14:53:34 +0000
let aWeekAgo = Calendar.current.date(byAdding: .weekOfMonth, value: -1, to: now)! // 2017-03-05 14:53:34 +0000
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
dateFormatter.timeStyle = .short
dateFormatter.doesRelativeDateFormatting = true
let nowString = dateFormatter.string(from: now)
print(nowString) // prints: Today at 3:53 PM
let yesterdayString = dateFormatter.string(from: yesterday)
print(yesterdayString) // prints: Yesterday at 3:53 PM
let aWeekAgoString = dateFormatter.string(from: aWeekAgo)
print(aWeekAgoString) // prints: March 5, 2017 at 3:53 PM
答案 2 :(得分:6)
试一试
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .ShortStyle
dateFormatter.timeStyle = .ShortStyle
dateFormatter.doesRelativeDateFormatting = true
let date = NSDate()
let dateString = dateFormatter.stringFromDate(date)