我正在尝试以 mm/dd/YYYY 格式存储日期以实现我尝试在 mongoShell 中执行以下操作
dt=new Date(2012,01,01)
ISODate("2012-01-31T18:30:00Z")
这不是我想要的格式。我正在尝试将其存储为 ISODate("2012-01-01") 以便我可以使用 between , greater than less than 那种比较从 mongoDB 中获取我想要的数据。
一种可能的解决方案是以以下格式存储
{
year : 2016,
month: 1,
day: 1,
yymmdd : 20160001
}
{
year : 2015,
month: 10,
day: 20,
yymmdd : 20151020
}
yymmdd是
年乘以 10,000
月乘以 100 并加上日期
所以 Jan - 1 2016 将是 2016x10000 + 0x100 +1 = 20160001
Nov-20 2015 将是 2015x10000 + 10*100 + 25 = 20151025
等等
上述设计可以实现从 0AD 到 9999AD 的排序
日期是一个 64 位整数,所以如果您使用 yyyymmdd 样式(如上),它是一个 32 位整数,可以节省您的空间并服务于您的目的
听起来您的问题是关于如何将存储在 Mongo 中的 ISO 日期转换为字符串。我相信您可以为 Java 制定正确的语法,但是在 Mongo shell 中,您可以像这样简单地做到这一点:
> d=new Date(2012,01,01)
ISODate("2012-02-01T05:00:00Z")
> print ( d.getFullYear()+"/"+d.getMonth()+"/"+d.getDate() )
2012/1/1
但请注意,您返回的是传递给 Date 的数字,而不是反映月份的数字。要解决这个问题,您可以使用d.toLocaleDateString()
> d.toLocaleDateString()
02/01/2012
这是因为 JavaScript Date 函数需要(并返回)从 0 开始的月份,并且您还需要确保注意相对于 UTC/GMT 时区的时区。