2017-11-15 9 views
2

ユーザーが選択したタイムゾーンに応じてデバイスの内部時計を同期する必要があります。 、DSTオフセットありとNodaTimeのある特定のタイムゾーンの現在の日付時刻

var currentInstant = SystemClock.Instance.GetCurrentInstant().InZone(userTimezone); 

しかし、私はまた、ゾーンのDSTを有効/無効にするフラグを切り替えることができるようにする必要があります: 私は、システムクロックに対してそのゾーンの現在時刻を取得するには、次のコードを使用していますつまり、ゾーンに現在DSTが有効になっている場合、追加するオフセットを減算できるようにする必要があり、内部時計を標準オフセットでゾーン時間に設定するだけです。

私はオフセット基準(100%ではない、これはしかし正しい)が見つかりました:

currentInstant.GetZoneInterval().StandardOffset; 

をしかし、私はそれを使用してゾーンの時間を取得するかどうかはわかりませんか?

+0

DSTを有効/無効にするフラグが必要な理由は何ですか?それは決して正しいことではありません。 –

+0

私はそれがクライアントがそれを主張しているのではないことを知っています。何回か失敗したラウンドで彼を説得した後、それは悪い考えです。彼が使用している現在のアプリケーションにはこの機能があります。 – MarkovskI

+0

タイムゾーンは厳しいです。ほとんどの人はそれを知りません。 DSTが現在使用されている世界の場所を教えてもらえるかどうかクライアントに尋ねますが、一部の人はそれを観察しないことを選択します。政府が「DSTを永続化する」と言っているシナリオをどのように処理したいのかを尋ねますが、実際にはそれらが標準時を切り替えるということです。 –

答えて

2

あなたが近くにいるように聞こえます。あなたは、おそらくあなたは、このように取得したいOffsetDateTimeまたはLocalDateTime、欲しい:あなたがそれを必要とする場合

var now = SystemClock.Instance.GetCurrentInstant(); 
var zoneInterval = zone.GetZoneInterval(now); 
var offset = zoneInterval.StandardOffset; // Ignore any savings 
OffsetDateTime offsetNow = now.WithOffset(offset); 

あなたはoffsetNow.LocalDateTimeLocalDateTimeを得ることができます。

この時点では、実際にはタイムゾーンがないため、ZonedDateTimeはありません。「DSTなしのゾーン」は通常のタイムゾーンではありません。しかし、それはあなたが必要とするように聞こえる。

これは根本的に悪い考えです。クライアントにそのことをすでに納得させようとしていることはわかっていますが、クライアントがそれを理解しているときに悪い考えもあります...

+0

@Jon、それはアクセスコントロールシステムで使用されているので、私は彼が(少なくとも部分的に)発生する可能性のある問題を認識していると思っています、そしてその使用は特別なケースです。 – MarkovskI