import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        String pattern = "[uuuu-MM-dd'T'HH:mm:ss.SSSXX][uuuu-MM-dd'T'HH:mm:ss.SSSXXX]";
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern, Locale.ENGLISH);

        // Test
        Stream.of(
                "2015-04-29T10:15:00.500+0000",
                "2015-04-29T10:15:00.500+00:00",
                "2015-04-29T10:15:00.500Z"
        ).forEach(s -> System.out.println(OffsetDateTime.parse(s, dtf)));
    }
}