問題タブ [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.
c# - たとえば NodaTime 型に適用される場合、Json.NET コンバーターの ServiceStack.Text に相当するものは何ですか?
カスタム型 ( などNodaTime.LocalDateTime
) のシリアル化/逆シリアル化を ServiceStack.Text で制御するにはどうすればよいですか?
Json.NET はConverters
これを提供するため、クラスにカスタム型が含まれるたびに、対応するカスタム シリアライザー/デシリアライザーが使用されます。たとえば、タイプ NodaTime.LocalDateTime のプロパティは、カスタム メソッドを使用して文字列との間で変換できます。
db4o では、IObjectConstructor
永続化する前に型を別の型に変換する同様の変換レイヤーとして機能します (LocalDateTime を DateTime に変換できます)。
nodatime - NodaTime は相対時間表示をサポートしていますか?
ユーザーにとって絶対時間よりも相対時間が重要な状況があります。そのため、「CDT の午後 1 時にイベントが発生し、現在は 5 日後の CST の午後 5 時です」というよりも、「イベントが 5 日と 5 時間前に発生した」とすばやく言えることが重要です。
日付を UTC で保存し、変換してユーザーに表示します。
NodaTime 1.2 が完全にリリースされた時点で使用し、以前はバニラの ToString を使用していました。
ただし、このパターンを使用する時間は、現在の夏時間の状況ではなく、その時間の夏時間の状況を使用することになります。16:15:32 10/25/13 CDT
これは、 CST に移行したにもかかわらず、時間が次のように見えることを意味します。
これは時間の絶対的な尺度です。これにより、ユーザーは次の論理を実行する必要があります。「それはどれくらい前のことですか?今は夏時間ですか?そうであれば、差は x です。そうでない場合は、1 時間を足すか引くかしなければなりませんか?それが差 y になります。」
一方、15:15:32 10/25/13 CST
DST がない場合は、時間の相対的な尺度が表示されます。これにより、ユーザーは変換を行う必要がなくなり、コンテキスト内でその時間が何を意味するかをはるかに簡単に計算できるようになります。
多数の日付があるディスプレイでは、セット全体で絶対時間ロジックを実行するのが難しい場合があります。一度やるとうまくいくのは難しいです。ただし、「posted 5 hours ago」のような親しみやすい相対文字列は、日付と時刻の両方を自分で解決することも強制します。その情報は依然として重要です。
妥協案として、最初の 24 時間は投稿された空白の時間/分前に行うか、わかりやすい文字列と絶対時間の両方を含めることが考えられます。これらは両方とも、私が見たパターンです。
しかし、それらを無視して、相対コンテキストで表示される時間を取得するために、NodaTime に特定の昼光ステータスを時間に吹き込む方法はありますか?
.net - .NET アプリケーションが XenApp で使用されている場合、タイムゾーンを処理する堅牢な方法はありますか?
XenApp と組み合わせた .NET タイムゾーン ID に関連する問題に遭遇しましTimeZoneNotFoundException
たTimeZoneInfo.FindSystemTimeZoneById
。
正確な例外テキストは次のとおりです。
(同様のことが NodaTime 1.1 でも発生します。たとえば、 への呼び出しの中で発生しますNodaTime.DateTimeZoneProviders.Bcl.GetSystemDefault()
)。
奇妙なことにTimeZoneInfo.Local.Id
、サーバーは英語に設定された言語で実行されており、タイムゾーン ID は言語に中立である必要があります ( .Net TimeZoneInfo ID - Is it Windows Language Specific?を参照)。しかし、クライアントの言語はドイツ語です... (更新/明確化: クライアントとサーバーが同じ言語を使用している場合、問題は発生しません。)
ここで起こっていると思うことは次のとおりです。
- .NET は
GetTimeZoneInformation
、ローカル タイムゾーンを取得するために kernel32.dll を呼び出します。 - XenApp はクライアントのローカル タイムゾーンを使用するように構成できるため、API 呼び出しは XenApp によってインターセプトされます (「Citrix XenApp がホストするアプリケーションのユーザー タイムゾーンを取得することは可能ですか? 」を参照) 。 /01/05/xenapp-time-zone-setting/ )。
- 結果の
TIME_ZONE_INFORMATION
構造には、ドイツの標準名が含まれています (英語の XenApp サーバーで p/invoke を使用して確認しました)。 TIME_ZONE_INFORMATION
構造 ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms725481(v=vs.85).aspxを参照) には言語に依存しないタイムゾーン識別子が含まれていないため、.NET は一致しません。返されたドイツ語のタイムゾーン ID をローカル タイムゾーンの「データベース」(英語名) に格納し、(ローカライズされた) 標準名をタイムゾーンのフォールバック ID として使用します。したがって、TimeZoneInfo.Local.Id
「ローカル」タイムゾーンのドイツ語名が含まれています。TimeZoneInfo.FindSystemTimeZoneById
このフォールバック識別子はシステムにとって実際には不明であるため (異なる言語のシステムからのローカライズされた標準名であるため)、失敗します。
では、XenApp でクライアントのタイムゾーンの使用を無効にするよう顧客に伝える以外に、この問題を回避するにはどうすればよいでしょうか?
c# - Nodatimeを使用して期間から日付を除外する
2 つの値の間の時間を計算し、特定の日付を除外しようとしていLocalDateTime
ます (この例では、祝日です)。
ご想像differenceBetween
のとおり、値は 2 つの日付間の日数/時間/分/秒を示しています。
開始日から毎日チェックして、bankHolidays
コレクションにその日付が含まれているかどうかを確認できます。
いくつかの明白なことが欠けているように感じます。より簡単な方法があるはずです。特定の日付を除外しながら、2 つの日付の間の期間を見つける簡単な方法はありますか?
週末もこの除外に含める必要があります。明らかな方法は、週末の曜日を確認しながら銀行の休日を確認することですが、これはそれを処理する最善/正しい方法ではないようです。
c# - NodaTime で午前 0 時に始まらない日の作業
私は、始発列車が 0400 に出発し、最終列車が 0200 に出発する列車の時刻表を含むアプリケーションに取り組んでいます。したがって、このアプリケーションのユーザーは、0300 に始まり 0300 に終わる日を扱います。つまり、彼らが「 200 時の水曜日の電車」は、実際には「木曜日の 2 時に出発する電車」という意味です。
このアプリケーションでは、(たとえば) 水曜日に出発するすべての列車を保存する必要があります。つまり、0300 より前に出発する列車は含めず、翌日 0300 までに出発する列車を含める必要があります。
怒らずにアプリケーションでこれを表現するにはどうすればよいでしょうか? 簡単にクエリできるように、これをデータベースにどのように格納する必要がありますか?
c# - How do I accurately represent a Date Range in NodaTime?
Goals
I have a list of LocalDate
items that represent sets of start dates and end dates.
I would like to be able to store date ranges, so that I can perform operations on them as a set of overlapping or distinct ranges, etc.
Questions
- Does NodaTime provide some sort of DateRange construct that I've missed in the docs?
- Am I thinking about this wrong? Is there a more natural / preferred way to accomplish this that NodaTime already allows for?
- Am I setting myself up for trouble by attempting to think about a date range using a LocalDate for a start and an end date?
I'm completely new to NodaTime and assuming that this is a conceptual misunderstanding on my part.
Update: I noticed a similar question on the subject from 2009, but that seems to refer to another utilies class; I'm assuming that since then NodaTime may have evolved to accomodate this situation.
time - OLSON/IANA タイムゾーンのより良い名前
Web サイトで Windows タイム ゾーンを OLSON タイム ゾーンに変換したいと考えています。ただし、OLSON タイム ゾーンの問題は、国名の代わりに大陸を名前に使用することです。
正確なタイム ゾーンを見つけるために大陸名を入力する必要があるとは思わない顧客もいると思います。また、タイム ゾーンのリストは、Windows で使用されるものよりもはるかに多く、ほぼ 1000 に上ります。たとえば、顧客が大陸名を入力する必要があることを知ったとしてもAsia
、すべてのアジア諸国の何百ものタイム ゾーンを検索する必要があります。これは使い勝手の点で非常に悪いです。
OLSON/IANA タイム ゾーン名を次のような国名にマップするデータベースはありますか。
c# - DateTime.Now およびカルチャ/タイムゾーン固有
私たちのアプリケーションは、地理的に異なる場所からのユーザーを処理するように設計されています。
現在のエンド ユーザーの現地時間とタイム ゾーンが何であるかを検出できません。彼らは、ヨーロッパ/ロンドンのタイムゾーンからアクセスしても、sv-se、en-us、ta-In などの異なる文化を選択します..
米国のホスティングサーバーでホストしました。アプリケーションユーザーはNorway/Denmark/Sweden/UK/USA/India
問題はDateTime.Now
、レコードの作成日/更新日などを保存するために使用されていることです。
サーバーは米国で実行されるため、すべてのユーザーデータは米国時間として保存されます:(
SOで調査した後、すべての履歴日付をDBに保存することにしましたDateTime.UtcNow
問題:
に作成されたレコードがあり29 Dec 2013, 3:15 P.M Swedish time
ます。
インド/スウェーデン/アメリカでログインしたユーザーに同じ履歴時間を表示したい。
現在、ログインしている現在のカルチャ ユーザーを使用して、構成ファイルからタイムゾーンを選択し、TimeZoneInfo クラスでの変換に使用しています。
コードを表示
注: ユーザーは、ログインする前にカルチャ/言語を変更できます。米国のサーバーで実行されるローカリゼーション ベースのアプリケーションです。
を見NODATIME
たことがありますが、別の場所でホストされている多文化 Web アプリケーションにどのように役立つか理解できませんでした。
質問
29 Dec 2013, 3:15 P.M
INDIA/USA/Anywhere` にログインしているユーザーに同じレコード作成日を表示するにはどうすればよいですか?
現在、私のロジックはConvertUTCBasedOnCulture
、文化にログインしているユーザーに基づいています。ユーザーはインド/米国のどの文化を使用してもログインできるため、これは文化に関係なく行う必要があります。
データベース列
作成時間:SMALLDATETIME
更新:試みられた解決策:
DATABASE COLUMN TYPE: DATETIMEOFFSET
UI
最後に、各リクエストで以下の Momento.js コードを使用して現在のユーザーの現地時間を送信しています
応用
それから呼ばれた
ビューで
dd-MMM-yyyy CET/PST
ビューでは、ローカル時間をユーザーに表示しますが、 (2 時間前)のように表示したいです。
この 2 時間前は、エンド ユーザーの現地時間から計算する必要があります。タイムゾーン表示とローカルユーザー計算で作成/編集されたスタックオーバーフローの質問とまったく同じです。
例: answered Jan 25 '13 at 17:49 CST (6 hours/days/month ago)
したがって、USA/INDIA ユーザーからの別の視聴者は、この記録が INDIA/USA 現在時刻から正確に 6 時間で作成されたことを本当に理解できます。
表示形式と計算以外はほぼできたと思います。これどうやってするの?
c# - NodaTimeを使用して、インスタントを対応するシステムのZonedDateTimeに変換する方法は?
データベースにイベント ログがあり、イベントの日時が UTC 時間として保存されています。NodaTime を使用している私のアプリケーションでは、値を として取得し、DateTime
それを に変換しますInstant
。
今、私はシステムのタイムゾーンを使用することにZonedDateTime
対応したいと考えています。必要なものを手に入れるためにinstant
使用できることを知っています。ただし、変数に正しい値を入力する方法がわかりません。システムのタイムゾーンに対応するオブジェクトを取得するにはどうすればよいですか?instant.InZone(systemTimeZone)
ZonedDateTime
systemTimeZone
DateTimeZone