データベースにさまざまな上映時間があり、オフセットを作成して、ユーザーのタイムゾーンに基づいて正しい時間を表示したいと考えています。
GMTからユーザーのタイムゾーンオフセットを取得し、それを最初に時間に変換しています。
NSTimeZone.localTimeZone().secondsFromGMT / 60 / 60
次に、日付オブジェクトに時間を追加する方法を見つける必要があります。それは私が苦労している場所です。
let formatter = NSDateFormatter()
formatter.dateFormat = "HH:mm"
let date = formatter.dateFromString(timeAsString)
println("date: \(date!)")
次に、AM/PMで読みやすくするために、ラベルで使用する日付から文字列を作成しています。
formatter.dateFormat = "H:mm"
formatter.timeStyle = .ShortStyle
let formattedDateString = formatter.stringFromDate(date!)
println("formattedDateString: \(formattedDateString)")
時間を足したり引いたりする方法がわからないようです。文字列を分割しましたが、負になることがあり、機能しません。多分私はこれについて間違っているつもりです。
助けてくれてありがとう。
キース
GMTに文字列として保存されている表示時間を変換し、それをユーザーのローカルタイムゾーンで表示する場合は、not手動でNSDate
を調整する必要があります。/Date
オブジェクト。フォーマッタで適切なタイムゾーンを使用するだけです。たとえば、Swift 3:
let gmtTimeString = "5:00 PM"
let formatter = DateFormatter()
formatter.dateFormat = "h:mm a"
formatter.timeZone = TimeZone(secondsFromGMT: 0) // original string in GMT
guard let date = formatter.date(from: gmtTimeString) else {
print("can't convert time string")
return
}
formatter.timeZone = TimeZone.current // go back to user's timezone
let localTimeString = formatter.string(from: date)
またはSwift 2:
let formatter = NSDateFormatter()
formatter.dateFormat = "h:mm a"
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) // original string in GMT
let date = formatter.dateFromString(gmtTimeString)
formatter.timeZone = NSTimeZone.localTimeZone() // go back to user's timezone
let localTimeString = formatter.stringFromDate(date!)
dateByAddingTimeInterval 関数を使用して、時間を加算および減算します。 dateFormat文字列にaを追加して、午前または午後を出力します。
var showTimeStr = "00:00 PM" //show time in GMT as String
let formatter = NSDateFormatter()
formatter.dateFormat = "hh:mm a"
let showTime = formatter.dateFromString(showTimeStr)
showTime.dateByAddingTimeInterval(3600) //Add number of hours in seconds, subtract to take away time
showTimeStr = formatter.stringFromDate(showTime)
これが私の最終的なコードであり、b.Morgansの回答と組み合わされています。私はそれがすべて今働いていると信じています。
let offsetTime = NSTimeInterval(NSTimeZone.localTimeZone().secondsFromGMT)
var showTimeStr = "05:00 PM" //show time in GMT as String
let formatter = NSDateFormatter()
formatter.dateFormat = "h:mm a"
let showTime = formatter.dateFromString(showTimeStr)
let finalTime = showTime?.dateByAddingTimeInterval(offsetTime) //Add number of hours in seconds, subtract to take away time
showTimeStr = formatter.stringFromDate(finalTime!)