问题标签 [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 数据库来跟踪应用程序的分析。我正在编写一个 Clojure 应用程序(使用 clj-time 和 Monger)来从数据库中获取数据。
我有一个包含类似记录的集合
每个不同device
的代表我的服务的不同用户。我想做的是找出我每天有多少(唯一)用户,但需要注意的是,我希望“一天”专门指美国/中部时区,考虑夏令时. (如果这不是一个要求,我想我可以做一些类似 a$group
然后 a 的事情distinct
。)
这是我一直在做的事情:
如果您看不懂 Clojure,这基本上是说:获取中央时区最近n 个午夜的列表,然后运行 Mongo 查询以查找每对连续午夜之间的所有记录。然后,计算device
每天不同 s 的数量。
这是我不喜欢这种方法的地方:
- 每天运行一个单独的查询(我通常一次查看 30 天)感觉不对;这是应该在数据库端而不是应用程序端完成的事情。
- 计算不同
device
的 s 也应该由数据库完成。 - 我的服务器设置为 UTC 时区,因此如果它在 UTC 午夜之后但在中央时间午夜之前,则此列表中的最后一个条目将始终为零。这很容易修补,但我更喜欢一个足够聪明的解决方案来首先防止它。
- 整个函数运行大约需要 500 毫秒。这并不可怕——我是唯一一个运行查询的人,而且每天只有一两次——但看起来这个操作不应该花那么长时间。
有没有办法可以将更多这种逻辑推入 MongoDB 查询?
clojure - 如何“解析”特定时区的日期?
使用 clj-time,我可以解析日期和时间
我可以通过这样做将它转换回字符串
这是 UTC 时区内那个时刻的年、月和日。如何获得DateTime
相对于另一个时区的未解析版本?例如,对于上面的示例,我想指定 UTC–5 时区并获取字符串“2013-06-03”。我玩过from-time-zone
,to-time-zone
但似乎找不到函数和参数的正确组合。
clojure - clj-time 总是返回今天的日期。
我这里有一个奇怪的问题。我正在从数据库中调用日期,并尝试显示格式为“2013-01-01”的 PostgreSQL 日期,以在我的网站上显示为“2013 年 1 月 1 日”
我有以下代码:
对数据库的调用如下所示:
如果我从 REPL 中测试,上面的代码可以满足我的要求:
但是我在网页上看到的是“2013 年 9 月 1 日”(截至撰写本文时的今天),没有其他日期。我的数据库中没有“2013-09-01”。
我从 (coerse-mdy) 的数据库中返回了原始日期值,它返回了正确的日期,所以我能够隔离这个问题的最接近的是 (to-mdy) 或 (coerce- mdy)。
到目前为止,我已经尝试将函数移动到本地命名空间并使用本地化的 let 值。
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
s 代表自纪元以来的时间。他们都有相同的时区。我想找出这两次之间的秒数差异,尊重日光节约。
“a”在哪里2009-11-30T08:13:16.000-00:00
和
“b”在哪里2009-10-10T04:00:00.000-00:00
使用 JodaTime,我可以Interval
将这两次制作出来,将它们变成Duration
,然后得到StandardSeconds
.
但这不起作用,因为 docs forPeriod
表明这Duration
会弄乱日光节约:
当这个时间段加到一个瞬间时,效果就是依次添加每个字段。因此,这会考虑夏令时。将 1 天的时间段添加到夏令时开始的前一天只会增加 23 小时而不是 24 小时,以确保时间保持不变。如果这不是您想要的行为,请参阅持续时间。
我怎样才能完成这项任务?
clojure - Clojure 将时间戳解析为字符串
我正在尝试将 clojure 时间戳转换为特定格式。我正在使用 clj-time 库。https://github.com/clj-time/clj-time。这是我正在做的事情:
这看起来很像文档示例,但我不明白为什么我的 ClassCastException 看起来像这样:
谢谢你的帮助。
datetime - Clojure:序列化和解析文件的日期/时间?
我想将一些测试数据存储到一个文件中,并在我的测试中再次读出。数据是一系列 Clojure 映射,其中一个属性是clj-time
( org.joda.time.DateTime
) 日期/时间。当我将值写入文件(使用spit
)时,它会序列化为#<DateTime 2014-10-03T12:57:15.000Z>
. 当我尝试读回它(使用slurp
)时,我得到:
我想这并不奇怪,因为没有更多信息,我看不出它如何知道如何解析DateTime
. 有没有办法读取这些值并正确解析它们,或者我必须将它们序列化为字符串并在我读回它们时手动解析它们?
clojure - 使用 clj-time 获取 DateTime 实例之间的差异
我正在尝试使用clj-time计算两个 DateTime 实例之间的差异。我查看了文档并发现clj-time.core/minus
,clj-time.core/minus-
但两者都需要一个实例org.joda.time.ReadablePeriod
而不是DateTime
. 我更喜欢使用 cli-time,但如果不存在解决方案,那么使用 Joda Time 计算增量的最简洁方法是什么?
感谢您的帮助。
java - 如何在 Clojure 中为日期添加天数
我查看了以下问题: How to add days to current date in clojure。
但是,我对 Clojure 很陌生,我陷入了以下场景,我得到了字符串格式的时间戳。所以我使用以下方法解析它:
这给了我一个看起来像这样的结果:
如何在其中添加 90 天,然后将其转换回字符串格式?我根据上面的链接尝试了这个:
这给了我以下错误: