問題タブ [clj-time]
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.
mongodb - 特定のタイムゾーンに従って日ごとにレコードをグループ化する効率的な方法はありますか?
アプリケーションの分析を追跡するために MongoDB データベースを使用しています。データベースからデータを取得するために、(clj-time と Monger を使用して) Clojure アプリケーションを作成しています。
次のようなレコードを含むコレクションがあります
それぞれdevice
が私のサービスの異なるユーザーを表します。私がやりたいことは、私が毎日何人の (一意の) ユーザーを持っているかを調べることですが、「日」は特に米国/中央時間帯を指し、夏時間を考慮したいという注意事項があります. $group
(それが要件でなければ、 a のようなことをしてからa を実行できると思いますdistinct
。)
これが私がやってきたことです:
Clojure を読むことができない場合、これは基本的に次のようになります:中部時間帯の最新のn 個の真夜中のリストを取得し、次に Mongo クエリを実行して、連続する真夜中の各ペアの間のすべてのレコードを検索します。device
次に、各日内の個別の の数を数えます。
このアプローチについて私が気に入らない点は次のとおりです。
- 日ごとに個別のクエリを実行する (私は通常、一度に 30 日を調べます) のは間違っていると感じます。これは、アプリケーション側ではなくデータベース側で行う必要があります。
- 個別
device
の のカウントも、データベースで行う必要があります。 - 私のサーバーは UTC タイム ゾーンに設定されているため、UTC では午前 0 時以降、中部時間では午前 0 時より前の場合、このリストの最後のエントリは常にゼロになります。これはパッチを適用するのに十分簡単ですが、そもそもそれを防ぐのに十分なほどスマートなソリューションを望んでいます.
- この関数全体の実行には約 500 ミリ秒かかります。それはひどいことではありません — クエリを実行するのは私だけで、1 日に 1 つか 2 回しかありません — しかし、操作にそれほど時間がかからないように思えます。
このロジックをさらに MongoDB クエリに押し込む方法はありますか?
clojure - 特定のタイムゾーンの日付を「解析」するにはどうすればよいですか?
clj-time を使用すると、次のようにして日付と時刻を解析できます
これを行うことで、これを文字列に戻すことができます
これは、UTC タイム ゾーン内のその瞬間の年、月、日です。DateTime
別のタイム ゾーンに関連するの未解析バージョンを取得するにはどうすればよいですか? たとえば、上記の例では、UTC-5 タイム ゾーンを指定して、「2013-06-03」という文字列を取得したいと考えています。from-time-zone
andをto-time-zone
いじってみましたが、関数と引数の適切な組み合わせが見つからないようです。
datetime - clj-time とユーザーのタイムゾーンでの表示
to-local-date-time、org.joda.time.DateTimeZone/getDefault、フォーマッターなどで遊んでいますが、UTC として保存した日時を取得する方法がまだわかりません。ユーザーのタイムゾーンで表示します。時刻を表示できるフォーマッタもありますが、オフセット付きの UTC 時刻が表示されます。たとえば、2013-10-05T19:02:25.641-04:00 がある場合、「2013-10-05 14:02:25」と表示するにはどうすればよいですか?
java - サマータイムを考慮した時差
long
エポックからの時間を表す2 つの s があります。どちらも同じタイムゾーンです。サマータイムを考慮して、これら 2 つの時間の差を秒単位で求めたいと思います。
「あ」の場所2009-11-30T08:13:16.000-00:00
と
「b」の場所2009-10-10T04:00:00.000-00:00
JodaTime を使用しInterval
て、これら 2 つの時間から を作成し、それらを に変換してDuration
、 を取得できますStandardSeconds
。
ただし、これは機能しません。これは、夏時間の節約を台無しにすることをPeriod
示すためのドキュメントです。Duration
この期間がインスタントに追加されると、各フィールドが順番に追加されます。その結果、これにはサマータイムが考慮されます。サマータイムが始まる前日に 1 日の期間を追加すると、時間を同じに保つために 24 時間ではなく 23 時間しか追加されません。これが必要な動作でない場合は、期間を参照してください。
どうすればこのタスクを達成できますか?
datetime - Clojure:ファイルとの間で日付/時刻をシリアル化および解析しますか?
テスト データをファイルに保存し、テストで再度読み取りたいと思います。データは一連の Clojure マップであり、その 1 つのプロパティはclj-time
( org.joda.time.DateTime
) 日付/時刻です。値をファイルに書き込むと(を使用spit
)、としてシリアル化され#<DateTime 2014-10-03T12:57:15.000Z>
ます。slurp
(で)読み戻そうとすると、次のようになります。
より多くの情報がなければ、DateTime
. これらの値を読み取って適切に解析する方法はありますか、それとも文字列としてシリアル化し、読み戻すときに手動で解析する必要がありますか?
clojure - clj-time を使用して DateTime インスタンス間の差を取得する
clj-timeを使用して 2 つの DateTime インスタンスの差を計算しようとしています。ドキュメントを調べたところclj-time.core/minus
、 andが見つかりましたが、どちらも のインスタンスではなくclj-time.core/minus-
のインスタンスが必要です。私はcli-timeを使用したいと思いますが、解決策が存在しない場合、Joda Timeを使用してデルタを計算する最もクリーンな方法は何ですか? org.joda.time.ReadablePeriod
DateTime
お手伝いありがとう。
java - Clojureで日付に日数を追加するにはどうすればよいですか
次の質問を見てきました: How to add days to current date in clojure .
ただし、私は Clojure に非常に慣れていないため、タイムスタンプを文字列形式で取得している次のシナリオに行き詰まっています。したがって、次を使用して解析しています。
これにより、次のような結果が得られます。
これに90日を追加してから、文字列形式に戻すにはどうすればよいですか? 上記のリンクに基づいてこれを試しました:
これにより、次のエラーが発生しました。