Jest ISO 8061 date time
Faktycznie, przynajmniej w Java8 to bardzo proste do analizowania tego jednego, ponieważ istnieje predefiniowany DateTimeFormatter
. Tutaj mała testów jednostkowych jako demonstracji:
import org.junit.Test;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import static org.junit.Assert.assertEquals;
public class DateTimeFormatterTest {
@Test
public void testIsoDateTimeParse() throws Exception {
// when
final ZonedDateTime dateTime = ZonedDateTime.parse("2013-03-31T16:46:38.000Z", DateTimeFormatter.ISO_DATE_TIME);
// then
assertEquals(2013, dateTime.getYear());
assertEquals(3, dateTime.getMonthValue());
assertEquals(31, dateTime.getDayOfMonth());
assertEquals(16, dateTime.getHour());
assertEquals(46, dateTime.getMinute());
assertEquals(38, dateTime.getSecond());
assertEquals(ZoneOffset.UTC, dateTime.getZone());
}
}
Przed Java8, chciałbym spojrzeć na Converting ISO 8601-compliant String to java.util.Date i zdecydowanie domyślnie używając Joda Time z czegoś. jak:
final org.joda.time.DateTime dateTime = new org.joda.time.DateTime.parse("2013-03-31T16:46:38.000Z");
BTW, nie używaj new DateTime("2013-03-31T16:46:38.000Z")
jak użyje domyślnej strefy czasowej, która prawdopodobnie nie jest to, co chcesz.
SimpleDateFormat będzie w stanie przeanalizować tylko dowolny łańcuch daty, który na niego rzucisz. Trzeba tylko powiedzieć mu, w jakim formacie można się tego spodziewać. Ponadto, Apache Commons Lang ma pewne możliwości analizowania Daty, jak sądzę, które mogą uprościć pewne rzeczy. – CodeChimp
Też tak myślałem, ale java.text.ParseException: Nie można oddzielić daty: "2013-03-31T16: 46: 38.000Z" –