Hen*_*gan 17 nsdate nsdateformatter ios swift
我有一个日期"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
Run Code Online (Sandbox Code Playgroud)
但是,当我使用以下代码时,它返回一个空字符串.
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)
Run Code Online (Sandbox Code Playgroud)
如何使这项工作在Swift中显示"今天"或"昨天"?
Nat*_*ook 30
它是空白的原因是您的日期格式只有时间组件.结合使用.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"
Run Code Online (Sandbox Code Playgroud)
Ima*_*tit 11
使用Swift 3,Apple Developer API Reference声明了有关DateFormatter的dateFormat属性:
只有在使用固定格式表示时才应设置此属性,如使用固定格式日期表示中所述.对于用户可见的表示,如果使用预定义的样式无法实现所需的格式,则应使用dateStyle和timeStyle属性,或setLocalizedDateFormatFromTemplate(_ :)方法; 这两个属性和此方法都提供了适合显示给用户的本地化日期表示.
doesRelativeDateFormatting DateFormatter 财产有以下声明:
接收器的日期样式.
import Foundation
let now = Date() // 2019-08-09 12:25:12 +0000
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: now)! // 2019-08-08 12:25:12 +0000
let aWeekAgo = Calendar.current.date(byAdding: .weekOfMonth, value: -1, to: now)! // 2019-08-02 12:25:12 +0000
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
dateFormatter.timeStyle = .short
dateFormatter.doesRelativeDateFormatting = true
let nowString = dateFormatter.string(from: now)
print(nowString) // prints: Today at 2:25 PM
let yesterdayString = dateFormatter.string(from: yesterday)
print(yesterdayString) // prints: Yesterday at 2:25 PM
let aWeekAgoString = dateFormatter.string(from: aWeekAgo)
print(aWeekAgoString) // prints: August 2, 2019 at 2:25 PM
Run Code Online (Sandbox Code Playgroud)
同样,dateFormat doesRelativeDateFormatting财产有以下声明:
接收器的时间风格.
import Foundation
let now = Date() // 2019-08-09 12:25:12 +0000
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: now)! // 2019-08-08 12:25:12 +0000
let aWeekAgo = Calendar.current.date(byAdding: .weekOfMonth, value: -1, to: now)! // 2019-08-02 12:25:12 +0000
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
dateFormatter.timeStyle = .short
dateFormatter.doesRelativeDateFormatting = true
let nowString = dateFormatter.string(from: now)
print(nowString) // prints: Today at 2:25 PM
let yesterdayString = dateFormatter.string(from: yesterday)
print(yesterdayString) // prints: Yesterday at 2:25 PM
let aWeekAgoString = dateFormatter.string(from: aWeekAgo)
print(aWeekAgoString) // prints: August 2, 2019 at 2:25 PM
Run Code Online (Sandbox Code Playgroud)
请注意,DateFormatter与以下情况的枚举:dateFormat,doesRelativeDateFormatting,DateFormatter,dateFormat,doesRelativeDateFormatting.
另请注意,DateFormatter仅在设置dateFormat和/或doesRelativeDateFormatting为您的DateFormatter实例时有效.
以下Playground代码显示如何使用dateFormat doesRelativeDateFormatting和DateFormatter属性以所需格式显示日期.
import Foundation
let now = Date() // 2019-08-09 12:25:12 +0000
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: now)! // 2019-08-08 12:25:12 +0000
let aWeekAgo = Calendar.current.date(byAdding: .weekOfMonth, value: -1, to: now)! // 2019-08-02 12:25:12 +0000
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
dateFormatter.timeStyle = .short
dateFormatter.doesRelativeDateFormatting = true
let nowString = dateFormatter.string(from: now)
print(nowString) // prints: Today at 2:25 PM
let yesterdayString = dateFormatter.string(from: yesterday)
print(yesterdayString) // prints: Yesterday at 2:25 PM
let aWeekAgoString = dateFormatter.string(from: aWeekAgo)
print(aWeekAgoString) // prints: August 2, 2019 at 2:25 PM
Run Code Online (Sandbox Code Playgroud)
试一试
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .ShortStyle
dateFormatter.timeStyle = .ShortStyle
dateFormatter.doesRelativeDateFormatting = true
let date = NSDate()
let dateString = dateFormatter.stringFromDate(date)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8774 次 |
| 最近记录: |