Чтобы добавить к ответу Мэтта Джонсона , отправка часового пояса полезна, когда у входной строки даты у вас есть одно смещение часового пояса (или формат не указывает его, например, 2019-02-21
), но вы хотите Elasticsearchпреобразовать его в другое смещение часового пояса перед сравнением с датами, хранящимися в целевом поле.
Давайте рассмотрим несколько примеров.
DateTimeKind.Utc
var client = new ElasticClient();
var maxExtractionTime = new DateTime(2019, 2, 8, 16, 10, 40, DateTimeKind.Utc);
var searchResponse = client.Search<RawDocument>(s => s
.Query(q => q
.DateRange(m => m
.Field(f => f.Vartime)
.GreaterThanOrEquals(maxExtractionTime)
)
)
);
сериализуется в
{
"query": {
"range": {
"var_time": {
"gte": "2019-02-08T16:10:40Z"
}
}
}
}
DateTimeKind.Local (я в Австралии)
var maxExtractionTime = new DateTime(2019, 2, 8, 16, 10, 40, DateTimeKind.Local);
сериализуется в
{
"query": {
"range": {
"var_time": {
"gte": "2019-02-08T16:10:40+10:00"
}
}
}
}
DateTimeKind.Unspecified
var maxExtractionTime = new DateTime(2019, 2, 8, 16, 10, 40, DateTimeKind.Unspecified);
сериализуется в
{
"query": {
"range": {
"var_time": {
"gte": "2019-02-08T16:10:40"
}
}
}
}
В первых двух случаях каждый содержит значение смещения часового пояса, которое Elasticsearch может использовать при сравнениидаты.В последнем случае смещение часового пояса отсутствует, поэтому оно будет интерпретироваться как UTC.В последнем случае вам может потребоваться отправить значение часового пояса, которое будет использоваться для преобразования ввода в UTC.
Существует некоторая история в сериализации DateTime
и DateTimeOffset
в клиенте ,Сериализация в 6.x не может быть изменена, за исключением типов свойств DateTime
и DateTimeOffset
в ваших собственных POCO, с настраиваемым сериализатором , подключенным .Это ограничение , если хотите, не часто является проблемой, однако, поскольку большинство API-интерфейсов в клиенте принимают DateMath
тип , где может использоваться форматированная строка даты, которая поддерживает математические выражения даты,В DateMath
существуют неявные преобразования из DateTime
и string
, а также методы для построения более сложных выражений.