当你需要在 ES 中指定时间相关的操作时:如超时时间,持续时间,可以使用 Nest 提供的 Time 数据类型。
Time 构造函数
最长用的方法:
1 2 3 4
var unitString = new Time("2d"); var unitComposed = new Time(2, Nest.TimeUnit.Day); var unitTimeSpan = new Time(TimeSpan.FromDays(2)); var unitMilliseconds = new Time(1000 * 60 * 60 * 24 * 2);
隐式转换
CLR 的 string,TimeSpan,Double 数据类型可以隐式转换为 Nest 的 Time 类型:
1 2 3 4 5 6 7
Time oneMinute = "1m"; Time fourteenDays = TimeSpan.FromDays(14); Time twoDays = 1000*60*60*24*2;
twoDays.Should().Be(new Time("2d")); (twoDays == new Time("2d")).Should().BeTrue(); (twoDays != new Time("2.1d")).Should().BeTrue(); (new Time("2.1d") == new Time(TimeSpan.FromDays(2.1))).Should().BeTrue();
调整精度为 1/10 纳秒后进行相等性判断:
1 2 3 4 5 6
Time oneNanosecond = new Time(1, Nest.TimeUnit.Nanoseconds); Time onePointNoughtNineNanoseconds = "1.09nanos"; Time onePointOneNanoseconds = "1.1nanos";
Time.MinusOne.Should().Be(Time.MinusOne); new Time("-1").Should().Be(Time.MinusOne); new Time(-1).Should().Be(Time.MinusOne); ((Time) (-1)).Should().Be(Time.MinusOne); ((Time) "-1").Should().Be(Time.MinusOne); ((Time) (-1)).Should().Be((Time) "-1");
以下示例均等价于 Time.Zero
1 2 3 4 5 6
Time.Zero.Should().Be(Time.Zero); new Time("0").Should().Be(Time.Zero); new Time(0).Should().Be(Time.Zero); ((Time) 0).Should().Be(Time.Zero); ((Time) "0").Should().Be(Time.Zero); ((Time) 0).Should().Be((Time) "0");
如果需要创建“-1ms”或“0ms”:
使用接受因子和时间单位的构造函数,或使用ms时间单位指定字符串。
1 2
(new Time(-1, Nest.TimeUnit.Millisecond) == new Time("-1ms")).Should().BeTrue(); (new Time(0, Nest.TimeUnit.Millisecond) == new Time("0ms")).Should().BeTrue();
时间单位
DateInterval 或 Time 数据类型会隐式转换为 Union<DateInterval,Time>: