MongoDB Формат даты и времени

В mongodb adhoc запросе, прежде чем выполнить запрос, как отформатировать элемент типа даты в формате dd \ mm \ yyyy, а затем выполнить запрос?

 ControlAltDel30 мар. 2012 г., 16:16
какой язык программирования вы используете? Вы делаете это программно?

Ответы на вопрос(4)

вы можете создавать объекты Date из строк, используя метод parse класса DateFormat.

Документацию по Java для класса DateFormat можно найти здесь:http://docs.oracle.com/javase/1.4.2/docs/api/java/text/DateFormat.html

Конкретный раздел о методе разбора находится здесь:http://docs.oracle.com/javase/1.4.2/docs/api/java/text/DateFormat.html#parse%28java.lang.String%29

Документацию по Java для объекта Date можно найти здесь:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html Согласно разделу «Сводка конструктора», возможность передавать строку в конструктор «устарела. Начиная с версии 1.1 JDK, заменена на DateFormat.parse (String s)».

Во время изучения вышеизложенного я также наткнулся на класс Calendar, который может использоваться для преобразования объекта Date и набора целых чисел. Это может быть необязательно для этого приложения, но я подумал, что было бы полезно включить ссылку на документацию:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html

Целые числа для года, месяца, дня, часа и т. Д. Могут быть переданы с помощью метода set:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html#set%28int,%20int,%20int,%20int,%20int%29

В качестве примера, вот небольшая Java-программа, которая создает несколько объектов Date, сохраняет их в коллекции Mongo, а затем выполняет запрос, аналогичный тому, который вы описали. Надеюсь, это поможет вам достичь вашей цели. ПРИМЕЧАНИЕ. Эта программа удаляет коллекцию с именем «даты», поэтому обязательно измените имя коллекции, если у вас уже есть такая коллекция в вашей базе данных!

public static void main(String[] args) throws UnknownHostException, MongoException {
    Mongo m = new Mongo( "localhost:27017" );
    DB db = m.getDB("test");

    DBCollection coll = db.getCollection("dates");
    coll.drop();

    DateFormat df = DateFormat.getInstance();
    String dateString = new String();
    Date myDate = new Date();
    // Save some test documents
    for(int i=1; i<11; i++){
        dateString = "04/" + String.valueOf(i) + "/12 11:00 AM, EST";
        BasicDBObject myObj = new BasicDBObject("_id", i);
        try {
            myDate = df.parse(dateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        myObj.put("date", myDate);
        System.out.println(myDate);
        coll.save(myObj);
    }

    // Build the query 
    Date startDate = new Date();
    Date endDate = new Date();
    try {
        startDate = df.parse("04/4/12 11:00 AM, EST");
        endDate = df.parse("04/6/12 11:00 AM, EST");
    } catch (ParseException e) {
        e.printStackTrace();
    }
    BasicDBObject dateQuery = new BasicDBObject();
    dateQuery.put("$gte", startDate);
    dateQuery.put("$lte", endDate);

    System.out.println("---------------");
    //Execute the query
    DBCursor myCursor  = coll.find(new BasicDBObject("date", dateQuery));

    //Print the results
    while(myCursor.hasNext()){
        System.out.println(myCursor.next().toString());
    }
}
 vikasse31 мар. 2012 г., 08:43
Я прочитал ваш ответ ... на самом деле я использую драйвер Java, и я использую синтаксис new Date (), чтобы вставить текущую дату. Теперь я должен получить записи в указанном диапазоне. Проблема в том, что дата в mongodb находится в dd / MM / гггг ЧЧ: мм: сс теперь формат, который я получаю для извлечения записи, имеет формат дд / мм / гггг, поэтому я не могу получить свойства записей. Заранее спасибо
Решение Вопроса

вставив datetime как целое число, используя метод getTime () в Java. НАПРИМЕР:

Date dt=new Date();
long integer_date=dt.getTime();

Я использовал приведенную выше строку кода, чтобы вставить дату как целое число. При этом было легко получить записи между определенной датой.

Date класс имеетbefore(date) или жеafter(date) метод ... Прост в использовании: без преобразования в секунды / миллисекунды.

    try {
        date=(Date) input.getValueByField("date");
        boolean before = date.before(myDate); // compare the data retrieved with your date.
        if (before) {
            ...
        } else {
            ...
        }
    } catch (Exception e) {
        logger.error("Error...", e);
    }

Такой подход проще, чем принятый ответ.

Ваш ответ на вопрос