問題タブ [nodatime]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
timezone - ゾーン化された dateTime から UTC 時間 - LocalDateTimePattern が例外をスローする
以下のコードを使用して、NodaTime の LocalDateTime パターンを使用して、ゾーン化された日時から UTC 時刻を取得しようとしています。
以下のシナリオでの解析中に例外が発生します。1) パターンが「MM/dd/yyyy HH:mm:ss tt」のようで、DateTime 文字列が「5/28/2013 1:02:ss PM」のような場合2) パターンが「MM-dd-yyyy HH:mm:ss tt」のようなもので、DateTime 文字列が「5/28/2013 1:02:ss PM」のようなものである場合
最初のケースでは、パターンを「M/dd/yyyy HH:mm:ss tt」に変更すると機能しますが、先頭のゼロが失われてしまいます。パターンを「MM/dd/yyyy HH:mm:ss tt」に変更すると、2 番目のケースが機能します。
UTC 値を取得する別の方法はありますか、それともここで何か間違ったことをしていますか?
c# - .net の「あいまいな時間」にどのように対処しますか?
「DateTime」値を異なるタイムゾーンから UTC に、またはその逆に変換する必要があります。これには TimeZoneInfo を使用します。しかし、問題は「サマータイム」の時間変更がいつ発生するかです。
たとえば、今年は、次回は 11 月 3 日の午前 2 時 [CDT] に時刻が変更されます。したがって、11 月 3 日の午前 1 時 [CDT] は午前 6 時に変換され、次の時間に時刻が変更されると、午前 1 時 [現在の CST] になります。再び午前 6 時に変換されます。このページのコードを試してみましたが、この問題の処理方法については何も書かれていませんでした。では、この問題をどのように処理するのですか?
編集:
NodaTimeを試してみましたが、次のような変換を行うと
AmbiguousTimeException をスローします。それは良いことです。TimeZoneInfo を使用してこれを行うこともできます。しかし、どの localTime 値を選択する必要があるかを知るにはどうすればよいでしょうか?
編集2:
Matt とのチャット ディスカッションへのリンクは次のとおりです。
c# - Windows と IANA のタイム ゾーンを変換する方法は?
timezone tag wikiで説明されているように、タイム ゾーンには 2 つの異なるスタイルがあります。
Windows および .Net
TimeZoneInfo
クラス (Windows で実行する場合) で使用するために Microsoft によって提供されるものは、 などの値で識別され"Eastern Standard Time"
ます。TZDB で IANA によって提供され、
TimeZoneInfo
Linux または OSX での実行時に .NET クラスによって使用されるものは、 などの値によって識別され"America/New_York"
ます。
多くのインターネット ベースの API は IANA タイム ゾーンを使用しますが、さまざまな理由から、これを Windows タイム ゾーン ID (またはその逆) に変換する必要がある場合があります。
これを .Net でどのように実現できますか?
c# - MongoDB での NodaTime: 値クラス NodaTime.ZonedDateTime を逆シリアル化できません
NodaTimeとMongo DB Official Driverの最新バージョンを使用しています。ZonedDateTime
いくつかのプロパティで、.NET DateTime の代わりにNodaTime を使用する単純な POCO クラスがあります。
モデルをコレクションに簡単に入れることができますが、クエリされたモデルを読み取ろうとすると、次のようになりますMongoDB.Bson.BsonSerializationException
。
値クラス NodaTime.ZonedDateTime は逆シリアル化できません
この問題を解決/回避するための良い方法またはベスト プラクティスは何ですか?
アップデート
問題の解決策を投稿した後、新しい問題が発生する可能性があります... コレクションをクエリし、クエリで DateTime を使用すると、 where 句を評価する前に ZonedDateTimeSerializer` のwhere SomeDateTime < now' (where
ようになります。is a variable I create from system time) it seems that each document must be deserialized using my
これは大きなパフォーマンスの問題のようですね。たとえそれが痛いとしても、BCL DateTime に戻ることを本当に考えなければなりません。
更新 2
を使用してソリューションを受け入れていますZonedDateTimeSerializer
が、NodaTime と MongoDB の組み合わせには満足していませんが、どちらも優れた個々のソリューションです。しかし、現時点では、重い操作なしではうまく連携できません。