2017-09-14 85 views
2

我是新來的Java和日期時間格式的一般,我應該從CSV文件轉換GPS數據。 我的問題是如何完成我正在使用的格式。我是從GPS數據獲取的數據點是格式如下:將日期時間從ISO_INSTANT轉換爲午夜數秒

時間,緯度,經度,海拔

我已經分手了不同的數據點,並把它們在一個字符串數組,並且我應該數據點到整數或雙陣列轉換,如下所示:

public void convert() { 
int n = timesstr.length; //Amount of data points 
times = new int[n]; //Array for time in seconds (int)  
latitudes = new double[n]; //Array for latitudes (double) 
longitudes = new double[n]; //Array for longitudes (double) 
elevations = new double[n]; //Array for elevations (double) 
} 

我打算做一個for循環,轉換元件陣列中一個後一。現在問題在於,我應該如何將時間從數據點轉換爲從午夜開始的秒,因爲時間數據點被格式化爲ISO_INSTANT,例如,

2017-08-13T08:52:26.000Z

我應該如何去分析和從午夜ISO_INSTANT轉換數據點秒?根據我得到的信息,數據點

2017-08-13T08:52:26.000Z

轉換後應該給予整數31946,如31956秒過了午夜。

+3

您是否閱讀過[java.time.Instant]的[Javadoc](https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html)? –

回答

3

你可以做到這一點通過以下方式:

LocalDateTime.parse("2017-08-13T08:52:26.000Z", DateTimeFormatter.ISO_DATE_TIME).get(ChronoField.SECOND_OF_DAY); 

或者正如指出的@Andreas你可以這樣做:

ZonedDateTime.parse("2017-08-13T08:52:26.000Z").get(ChronoField.SECOND_OF_DAY); 

較短,較爲寬鬆。如果給出Z以外的時區,它甚至支持夏令時。 - Andreas

+0

'ZonedDateTime.parse(「2017-08-13T08:52:26.000Z」)。get(ChronoField.SECOND_OF_DAY)'更短,更寬鬆。它甚至支持夏令時,如果給出了其他'Z'的時區。 – Andreas

+0

@Andreas更新,謝謝。 – Oleg

+0

除非需要識別指定的時區(如Asia/Jayapura),否則我更傾向於'ZonedDateTime'上的'OffsetDateTime'。第三個選項是Instant.parse(「2017-08-13T08:52:26.000Z」)。atOffset(ZoneOffset.UTC).get(ChronoField.SECOND_OF_DAY);'。 –

相關問題