数日前、JAVAを使ってesにデータをインポートする練習をし、日付データの扱い方を考えました。次に、オンラインで検索したところ、es日付タイプをJAVAを使用してインポートすると、8時間の時差があることがわかりました。具体的な理由については、https://blog.csdn.net/linkedin_38160998/article/details/68951075またはBaiduにアクセスしてください。
インターネットにはたくさんの解決策がありますが、私はそれを自分で書く必要があると思います。
1つ目:タイムスタンプを使用して時間を記録します。
データを保存するときは、Stringを使用して日付に変換してからlongに変換します(ここでは、フォーマット変換を容易にするためにStringを使用しています)。
public final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str="2016-01-25 00:00:00";
Date date=dateFormat.parse(str);
Long dateLong=date.getTime();
データを取得したら、longを使用して日付に変換し、次に文字列に変換します。
DateFormat dateFormatdateFormat=new SimpleDateFormat();
long dateLong=1453651200000L;
Date date=new Date(dateLong);
String dateStr=dateFormat.format(date);
System.out.print(dateStr);
2番目のタイプ:文字列を直接使用してesに保存する
Date time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-7-21 00:00:00");
IndexResponse response = client.prepareIndex("database", "table")
.setSource(XContentFactory.jsonBuilder().startObject()
.field("number",0.8029)
.field("time",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time))
.endObject())
.get();
一般に、これら2つの方法でデータを保存した後、JAVAでデータを取得してから、型変換を行う必要があります。