2016-06-01 4 views
1

UIDatePicker(timePicker)からNSDateを取得してユーザタイムゾーンに変換しますが、サマータイムであるため1時間はオフになります。NSDateにDayLightSavingTimeを適用します

私はユーザーがサマータイムにいるかどうかをチェックしようとしました。はいの場合、NSDate/dateInUserTimezoneに時間を追加する必要があります。

どうすればこの問題を解決できますか?

func convertTimeZone() ->NSDate { 
     var date = timePicker.date 
     print(date) 
     var formatter = NSDateFormatter() 

     let timeZone = NSTimeZone(abbreviation: userTimeZone()) 
     formatter.timeZone = timeZone 
     formatter.dateFormat = "HH:mm:ss" 

     var isDaylightSavingTime: Bool { 
      return NSTimeZone.localTimeZone().daylightSavingTime 
     } 
     print(isDaylightSavingTime) 

     var daylightSavingTimeOffset: NSTimeInterval { 
      return NSTimeZone.localTimeZone().daylightSavingTimeOffset 
     } 

     let dateInUserTimezone = formatter.dateFromString(formatter.stringFromDate(date)) 

     return dateInUserTimezone! 
    } 

    func userTimeZone() -> String { 
     return NSTimeZone.localTimeZone().abbreviation ?? "" 
    } 

答えて

0

NSDateは本質的にUTC(タイムゾーンはありません)です。 UTCであなたの日付を保存/転送するのがベストです。次に、このUTCタイムスタンプを任意のタイムゾーンに変換することができます。ユーザーがDSTかどうかを検出するのではなく、希望のタイムゾーンに変換してみてください。どのように日付を現地時間帯に変換するかの例です。

var date = ... 
var myTimeZone = NSTimeZone.localTimeZone() 
var df = NSDateFormatter() 
df.timeZone = myTimeZone 
df.dateFormat = "yyyy.MM.dd G 'at' HH:mm:ss zzz" 
df.stringFromDate(date) 
+0

私の方法では、タイムゾーンが正しく動作します。 DayLightSavingTimeのため1時間だけです。そして私はこれをどのように適用できるのだろうかと思っています。 – R3ptor

+0

どのタイムゾーンを変換していますか? –

+0

UIPickerからNSDateをUTCで取得した後、userTimeZone関数からの短縮形を含むタイムゾーンを取得します。これは、timePicker.dateをデバイス上で選択された時刻に変換します。 dayLightSavingTimeOffsetからこの1時間を追加するだけです。 – R3ptor