2016-08-31 3 views
0

DSTモードになるNSDateをどのように作成することができるか知りたいと思います。DSTモードになるNSDateを作成する方法

私は法にnextDaylightSavingTimeTransition

を使用していますこれは、ドキュメントからです:

このプロパティには、受信機のための時間推移を夏時間(現在 インスタント後の)次の日付が含まれています。受信者のタイムゾーンで に応じて、このプロパティの値はGMTからのタイムゾーンのオフセットの変更を表す となります。 の受信者のタイムゾーンが現在、昼光 節約時間を観測していない場合はnilを返します。

そして、それはDSTモードになっている場合、私は検証より:

私はメソッドを使用しています:isDaylightSavingTimeForDate:

これは、ドキュメントからです:

YES受信機が夏時間を使用している場合日付で、そうでなければNO。

コード:

NSDate *nextDstTransition = [[NSTimeZone localTimeZone] nextDaylightSavingTimeTransition]; 


BOOL isDstOnForOldDate = [[NSTimeZone localTimeZone] isDaylightSavingTimeForDate:nextDstTransition]; 

残念ながら私のnextDstTransitionはDSTではありません。私の前提はタイムゾーンの問題と関連しています。

DSTモードでのNSDateの作成について、あなたにオプションを教えてください。

+1

1)NSDateにタイムゾーンまたは "DSTモード"がありません。あなたは何を達成しようとしていますか? - 2)2つの異なる変数 'nextDstTransition'と' oldWordate'はどのように関連していますか? - 3)Objective-CやSwiftの質問ですか? –

+0

@MartinR 1)Thx 2)間違いを訂正します。3)返答はSwiftまたはObjective-Cになります。 –

+1

現在、DSTがアクティブなので、nextDaylightSavingTimeTransitionはDSTが終了する次の時刻を返します。したがって、isDaylightSavingTimeForDateはfalseを返します。 - あなたは何を達成しようとしていますか? –

答えて

1

あなたは慎重にドキュメントを読む場合:nextDaylightSavingTimeTransition:あなたはタイムゾーンにある場合、DSTは(どちらか常にオン、または常にオフ)に変更はありませんDSTは、指定した日付後の変更、またはnilの次の時間を返します。 。あなたの日付がDSTであれば、あなたは大丈夫です。そうでなければ、いつ変化があるかを知る必要があります。

NSDate* date = ... 
if (! [[NSTimeZone localTimeZone] isDaylightSavingTimeForDate:date]) { 
    NSDate* change = [[NSTimeZone localTimeZone] nextDaylightSavingTimeTransitionAfterDate:date]; 
    if (change != nil) { 
     date = change; 
    } else { 
     // Tough, there is no DST in this time zone. 
    } 
} 
+0

Thxはこれをすでに理解しています。 –

1

最も洗練されたソリューションを調査して検索した結果、このようにすることが可能であると私は理解しています。

//This is date object and from beginning we could make prediction that is is in DST Mode.  
NSDate *workDateInDST = [[NSTimeZone localTimeZone] nextDaylightSavingTimeTransition]; 
//Hear we could validate if it is DST or not 
if (![[NSTimeZone localTimeZone] isDaylightSavingTimeForDate:workDateInDST]) { 
    workDateInDST = [NSDate date]; 
} 
+1

*今*あなたが望んでいたことを理解しています。私はおそらく別の方法で進むだろう。現在の日付がDSTであるかどうかを最初にテストします。そうでない場合は、nextDaylightSavingTimeTransitionを使用して別の日付を計算します。 –

+0

@MartinR thx私はあなたに私を助けるための質問を投票します。 –

+0

しないでください。 "シリアルupvoting"はSOで検出され、自動的に復帰します。それは私の評判の歴史に悪い印象を残します。答えは –

関連する問題