2017-02-02 66 views
0

Esper是否可以通過輸入管理時間戳。我使用的文件是這樣的:如何在使用文件中的時間戳時指定時間?

143 Sat Sep 12 14:43:05 CEST 2009 
149 Sat Sep 12 14:43:06 CEST 2009 
149 Sat Sep 12 14:43:09 CEST 2009 
143 Sat Sep 12 14:43:10 CEST 2009 
149 Sat Sep 12 14:43:12 CEST 2009 
143 Sat Sep 12 14:43:15 CEST 2009 
149 Sat Sep 12 14:43:15 CEST 2009 
149 Sat Sep 12 14:43:18 CEST 2009 
143 Sat Sep 12 14:43:20 CEST 2009 
149 Sat Sep 12 14:43:21 CEST 2009 

如何配置艾斯波所以可以使用

select * from Timer.win:time_batch(5 sec) 

這樣的,我得到的結果是這樣的:

143 Sat Sep 12 14:43:05 CEST 2009 
149 Sat Sep 12 14:43:06 CEST 2009 
149 Sat Sep 12 14:43:09 CEST 2009 
143 Sat Sep 12 14:43:10 CEST 2009 

編輯:

config.getEngineDefaults().getThreading().setInternalTimerEnabled(false); 

runtime.sendEvent(new CurrentTimeEvent(0)); 
engine.getEPAdministrator().createEPL("create context NineToFive start (0, 9, *, *, *) end (0, 17, *, *, *)"); 

然後我解析我的da像下面的答案taset和發送事件說:

long eventTime = userByDate.get(i).getSdf().getTime(); 

runtime.sendEvent(new CurrentTimeSpanEvent(eventTime)); 
runtime.sendEvent(new Event()); 

回答

0

操作步驟,得到EPServiceProviderManager使用外部定時器引擎實例:

Configuration config = new Configuration(); 
config.getEngineDefaults().getThreading().setInternalTimerEnabled(false); 
EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(config); 

之後,你有一個引擎實例,調用它。這將開始時間設置爲零。

epService.getEPRuntime().sendEvent(new CurrentTimeEvent(0)); 

然後創建您的EPL聲明。

然後,對於每一行,解析日期,解析事件數據,提前時間,併發送事件是這樣的:

long eventTime = parseDate(...); 
SomeEvent someEvent = parseEvent(...); 
epService.getEPRuntime().sendEvent(new CurrentTimeSpanEvent(eventTime)); 
epService.getEPRuntime().sendEvent(someEvent); 
+0

謝謝你,懂了工作。 – sweep

+0

我注意到使用上下文時,它仍然回答內部計時器,而不是外部計時器。即使我關掉它。也許是我的設置。 – sweep

+0

即使在設定我宣佈我的上下文之前的時間。它提供了一個輸出,但不是正確的。 – sweep