2017-09-14 57 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);'。 –

相关问题