日付は「2014-07-0220:57:38 +0000」で、「今日の午後8時57分」にフォーマットしたいと思います。文字列が昨日の場合は、「昨日の午前9時」と表示したいと思います。今日でも昨日でもない場合は、「27/6 at7:53pm」のように実際の日付を表示してください。
以下のコードで「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で「今日」または「昨日」を表示するにはどうすればよいですか?
空白の理由は、日付形式には時間コンポーネントしかないためです。と組み合わせ .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"
Swift 5.1、Apple Developer API Referenceは、DateFormatter
の- dateFormat
プロパティについて述べています:
固定形式の日付表現の操作 で説明されているように、固定形式の表現を操作する場合にのみ、このプロパティを設定する必要があります。ユーザーに表示される表現の場合は、 dateStyle および timeStyle プロパティを使用するか、目的の形式を使用できない場合は setLocalizedDateFormatFromTemplate(_:) メソッドを使用する必要があります。事前定義されたスタイルを使用して実現。これらのプロパティとこのメソッドはどちらも、ユーザーへの表示に適したローカライズされた日付表現を提供します。
次のPlaygroundサンプルコードは、 dateStyle 、 timeStyle 、および 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
これを試してみてください
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .ShortStyle
dateFormatter.timeStyle = .ShortStyle
dateFormatter.doesRelativeDateFormatting = true
let date = NSDate()
let dateString = dateFormatter.stringFromDate(date)