2016-07-06 7 views
0

なぜ一部のフィールドで日付の形式が異なるのだろうと思っていました。私のルールは次のように宣言されています:累積型日付のフォーマット

@Name("measurement_occupation") 
context ParkingSpotOccupation 
insert into CreateMeasurement 
select 
    e.source as source, 
    "ParkingSpotOccupation" as type, 
    min(e.time) as time, 
    { 
    "startDate", min(e.time), 
    "endDate", max(e.time), 
    "duration", dateDifferenceInSec(max(e.time), min(e.time)) 
    } as fragments 
from 
    SmartParkingEvent e 
output 
    last when terminated; 

、結果はAPIの測定値を使用して以下の通りです:

{ 
    "time": "2016-05-30T06:00:00.000+02:00", 
    "id": "33200", 
    "self": "https://management.post-iot.lu/measurement/measurements/33200", 
    "source": { 
    "id": "26932", 
    "self": "https://management.post-iot.lu/inventory/managedObjects/26932" 
    }, 
    "type": "ParkingSpotOccupation", 
    "startDate": { 
    "time": 1464580800000, 
    "minutes": 0, 
    "seconds": 0, 
    "hours": 6, 
    "month": 4, 
    "timezoneOffset": -120, 
    "year": 116, 
    "day": 1, 
    "date": 30 
    }, 
    "duration": 600, 
    "endDate": { 
    "time": 1464581400000, 
    "minutes": 10, 
    "seconds": 0, 
    "hours": 6, 
    "month": 4, 
    "timezoneOffset": -120, 
    "year": 116, 
    "day": 1, 
    "date": 30 
    } 
} 

はなぜ時間を食べてたstartDate/endDateに異なったレンダリング?次のように私のイベントprocessigルールの出力は、それがフォーマットされて表示されていても見知らぬ人、:

{ "time": { "date": 30, "day": 1, "hours": 6, "minutes": 0, "month": 4, "seconds": 0, "time": 1464580800000, "timezoneOffset": -120, "year": 116 }, "source": "26932", "fragments": [ "startDate", { "date": 30, "day": 1, "hours": 6, "minutes": 0, "month": 4, "seconds": 0, "time": 1464580800000, "timezoneOffset": -120, "year": 116 }, "endDate", { "date": 30, "day": 1, "hours": 6, "minutes": 10, "month": 4, "seconds": 0, "time": 1464581400000, "timezoneOffset": -120, "year": 116 }, "duration", 600 ], "type": "ParkingSpotOccupation" } 

だから、すべての日付が同じに見えますが、ではない私は、測定にアクセスするためのAPIを使用する場合。私はすべての日付を "2016-05-30T06:00:00.000 + 02:00"の形式で保存したいと思います。私もcast(min(e.time)、Date)を使用しようとしましたが、エラーが発生しました( 'Date'という名前のキャスト関数にリストされているClassはロードできません)。私はtoDate()関数を試しましたが、何も変更されませんでした。

答えて

2

問題は、Esperではすべての日付が実際にJavaのDateクラスであり、解析するときにはこれほど素晴らしい構造ではないということです。

最も簡単な方法は、ISO文字列を自分自身でフォーマットすることです。 Java SimpleDateFormatを使用できます。モジュールで宣言します。

create constant variable SimpleDateFormat ISO_FORMATTER = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 

してからちょうどそれを

ISO_FORMATTER.format(min(e.time)) 
ISO_FORMATTER.format(max(e.time)) 

を使用して、それが日付

のISO文字列を返します。