MongoDB Формат даты и времени - PullRequest
1 голос
/ 30 марта 2012

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

Ответы [ 4 ]

3 голосов
/ 09 апреля 2012

Я решил это, вставив datetime как целое число, используя метод getTime () в java. EG:

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

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

2 голосов
/ 02 апреля 2012

Если вы используете Java, вы можете создавать объекты 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());
    }
}
2 голосов
/ 30 марта 2012

Я задал похожий вопрос недавно ... это может быть то, что вы ищете: Каков синтаксис для дат в MongoDB, работающих на MongoLab?

0 голосов
/ 17 января 2018

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

public void execute(Tuple input) {
    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);
    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...