2017-03-09 55 views
1

我使用sqoop將avro文件格式導入選定列的表。使用avro-tools來日期顯示爲奇怪的格式(negetive)。我如何解碼日期?Avro tojson日期格式

{"first_name":{"string":"Mary"},"last_name": {"string":"Botman"},"birth_date":{"long":-345772800000}} 

其中如MySQL查詢擊掌正確格式

mysql> select first_name, last_name, birth_date from employees where first_name like 'Mary' and last_name ='Botman'; 
    +------------+-----------+------------+ 
    | first_name | last_name | birth_date | 
    +------------+-----------+------------+ 
    | Mary  | Botman | 1959-01-17 | 
    +------------+-----------+------------+ 
    1 row in set (0.07 sec) 

回答

0

長值-345772800000表示...

...毫秒指定數目由於標準鹼時已知as 「the epoch」,即1970年1月1日,格林威治標準時間00:00:00自1970年1月1日以來的 毫秒的數量

在你的例子中,它是一個負值,所以它從「時代」開始向後計數。在Java代碼中,您可以按如下所示從此值創建LocalDate,這將爲您提供與您的Hive查詢結果中顯示的結果相同的結果。

LocalDate date17Jan1959 = Instant.ofEpochMilli(-345772800000L) 
    .atZone(ZoneOffset.UTC) 
    .toLocalDate();