Код для интерфейса. Не реализация не имеет отношения к Java, а также к конструкции интерфейса.
Эта концепция была выведена в известность в книгах «Шаблоны / Банды четырех», но, скорее всего, была вокруг нее задолго до этого. Концепция, безусловно, существовала задолго до того, как существовала Java.
Конструкция интерфейса Java была создана для помощи в этой идее (среди прочего), и люди стали слишком сосредоточены на конструкции как центр смысла, а не оригинальное намерение. Тем не менее, это причина, по которой у нас есть общедоступные и частные методы и атрибуты в Java, C ++, C # и т. Д.
Это означает просто взаимодействовать с открытым интерфейсом объекта или системы. Не беспокойтесь и даже не ожидайте, как он делает то, что он делает внутренне. Не беспокойтесь о том, как это реализовано. В объектно-ориентированном коде, поэтому мы имеем общедоступные и частные методы / атрибуты. Мы намерены использовать общедоступные методы, потому что частные методы существуют только для внутреннего использования внутри класса. Они составляют реализацию класса и могут быть изменены по мере необходимости без изменения открытого интерфейса. Предположим, что в отношении функциональности метод класса будет выполнять ту же операцию с тем же ожидаемым результатом каждый раз, когда вы вызываете его с теми же параметрами. Это позволяет автору изменять способ работы класса, его реализацию, не нарушая взаимодействия с ним.
И вы можете запрограммировать интерфейс, а не реализацию, не используя конструкцию интерфейса. Вы можете запрограммировать интерфейс, а не реализацию на C ++, которая не имеет конструкцию интерфейса. Вы можете интегрировать две огромные корпоративные системы гораздо надежнее, если они взаимодействуют через публичные интерфейсы (контракты), а не вызывают методы для объектов, внутренних для систем. Ожидается, что интерфейсы всегда будут реагировать на один и тот же ожидаемый путь с учетом тех же входных параметров; если реализован интерфейс, а не реализация. Концепция работает во многих местах.
Встряхните мысль о том, что Java-интерфейсы имеют что-то, что связано с концепцией «Программа для интерфейса, а не реализация». Они могут помочь применить концепцию, но это не концепция.
Запрос в отношении диапазона дат (определенного месяца или дня) в Cookbook MongoDB имеет очень хорошее объяснение по этому вопросу, но ниже - это то, что я опробовал самостоятельно и это работает. Основываясь на моих экспериментах, вам нужно будет сериализовать ваши даты в формате, поддерживаемом MongoDB, потому что следующее дало нежелательные результаты поиска. Во втором примере результаты не ожидались, но все же был получен один. Это связано с тем, что выполняется базовое сравнение строк. items.save({
name: "example",
created_at: ISODate("2010-04-30T00:00:00.000Z")
})
items.find({
created_at: {
$gte: ISODate("2010-04-29T00:00:00.000Z"),
$lt: ISODate("2010-05-01T00:00:00.000Z")
}
})
=> { "_id" : ObjectId("4c0791e2b9ec877893f3363b"), "name" : "example", "created_at" : "Sun May 30 2010 00:00:00 GMT+0300 (EEST)" }
items.save({
name: "example",
created_at: "Sun May 30 18.49:00 +0000 2010"
})
items.find({
created_at: {
$gte:"Mon May 30 18:47:00 +0000 2015",
$lt: "Sun May 30 20:40:36 +0000 2010"
}
})
=> { "_id" : ObjectId("4c079123b9ec877893f33638"), "name" : "example", "created_at" : "Sun May 30 18.49:00 +0000 2010" }
db.collection.find({"createdDate":{$gte:new ISODate("2017-04-14T23:59:59Z"),$lte:new ISODate("2017-04-15T23:59:59Z")}}).count();
Замените collection
именем коллекции, которую хотите выполнить запрос
pymongo
Поиск объектов между двумя датами в Python с pymongo
в коллекции posts
(на основе учебника ):
from_date = datetime.datetime(2010, 12, 31, 12, 30, 30, 125000)
to_date = datetime.datetime(2011, 12, 31, 12, 30, 30, 125000)
for post in posts.find({"date": {"$gte": from_date, "$lt": to_date}}):
print(post)
Где {"$gte": from_date, "$lt": to_date}
указывает диапазон в терминах типов datetime.datetime
.
Чтобы уточнить. Важно знать, что:
. Вот рабочий фрагмент кода, где мы немного манипулируем датами для обеспечения Mongo (здесь я использую mongoose и хотите, чтобы результаты для строк, атрибут даты которых меньше (до) даты, заданной как параметр myDate), могут корректно обрабатывать:
var inputDate = new Date(myDate.toISOString());
MyModel.find({
'date': { $lte: inputDate }
})
Я попытался в этой модели в соответствии с моими требованиями. Мне нужно сохранить дату, когда когда-либо создается объект. Я хочу получить все записи (документы) между двумя датами в моем html-файле. Я использовал следующий формат: mm / dd / yyyy
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script>
//jquery
$(document).ready(function(){
$("#select_date").click(function() {
$.ajax({
type: "post",
url: "xxx",
datatype: "html",
data: $("#period").serialize(),
success: function(data){
alert(data);
} ,//success
}); //event triggered
});//ajax
});//jquery
</script>
<title></title>
</head>
<body>
<form id="period" name='period'>
from <input id="selecteddate" name="selecteddate1" type="text"> to
<input id="select_date" type="button" value="selected">
</form>
</body>
</html>
в моем файле py (python) я преобразовал его в «iso fomate» следующим образом
date_str1 = request.POST["SelectedDate1"]
SelectedDate1 = datetime.datetime.strptime(date_str1, '%m/%d/%Y').isoformat()
и сохранен в моей коллекции dbmongo с помощью «SelectedDate» «как поле в моей коллекции
для извлечения данных или документов между двумя датами, которые я использовал в следующем запросе
db.collection.find( "SelectedDate": {'$gte': SelectedDate1,'$lt': SelectedDate2}})
MongoDB фактически хранит миллины даты как int (64), как предписано http://bsonspec.org/#/specification
Однако, это может становится довольно запутанным, когда вы извлекаете даты, поскольку клиентский драйвер будет создавать экземпляр объекта даты с его собственным местным часовым поясом. Драйвер JavaScript в консоли mongo, безусловно, сделает это.
Итак, если вы заботитесь о своих часовых поясах, убедитесь, что знаете, что это должно быть, когда вы вернетесь. Это не должно иметь большого значения для запросов, поскольку оно все равно будет соответствовать одному и тому же int (64), независимо от того, в какой временной зоне находится объект даты (надеюсь). Но я бы определенно делал запросы с объектами фактической даты (не строки), и пусть драйвер делает свое дело.
Преобразуйте свои даты в часовой пояс GMT, когда вы набиваете их в Mongo. Таким образом, никогда не возникает проблема с часовым поясом. Затем просто сделайте математику в поле twitter / timezone, когда вы вытащите данные для презентации.
используйте $ get и $ lt, чтобы найти данные даты в mongodb
var tomorrowDate = moment(new Date()).add(1, 'days').format("YYYY-MM-DD");
db.collection.find({"plannedDeliveryDate":{ $gte: new Date(tomorrowDate +"T00:00:00.000Z"),$lt: new Date(tomorrowDate + "T23:59:59.999Z")}})
Используйте этот код, чтобы найти запись между двумя датами, используя $gte
и $lt
:
db.CollectionName.find({"whenCreated": {
'$gte': ISODate("2018-03-06T13:10:40.294Z"),
'$lt': ISODate("2018-05-06T13:10:40.294Z")
}});
Почему бы не преобразовать строку в целое число формы YYYYMMDDHHMMSS? Каждое приращение времени создавало бы большее целое число, и вы могли бы фильтровать целые числа, а не беспокоиться о преобразовании в время ISO.