Some of the other Answers such as by pablisco are correct about parsing the string to extract the number, a count of milliseconds since epoch. But they use outmoded date-time classes.
java.time
Java 8 and later has the java.time framework built-in. A vast improvement. Inspired by Joda-Time. Defined by JSR 310. Extended by the ThreeTen-Extra project. Back-ported to Java 6 & 7 by the ThreeTen-BackPort project, which is wrapped for Android by the ThreeTenABP project.
Consider the two parts of your input separately. One is a count from epoch in milliseconds, the other an offset-from-UTC.
Assuming the source used the same epoch as java.time (the first moment of 1970 in UTC), we can use that to instantiate an Instant object. An Instant is a moment on the timeline in UTC.
String inputMillisText = "1358157378910";
long inputMillis = Long.parseLong ( inputMillisText );
Instant instant = Instant.ofEpochMilli ( inputMillis );
Next we parse the offset-from-UTC. The trick here is that we do not know the intention of the source. Perhaps they meant the intended date-time is an hour behind UTC and so we should follow that offset text as a formula, adding an hour to get to UTC. Or they meant the displayed time is one hour ahead of UTC. The commonly used ISO 8601 standard defines the latter, so we will use that. But you really should investigate the intention of your data source.
String inputOffsetText = "+0100";
ZoneOffset zoneOffset = ZoneOffset.of ( inputOffsetText );
We combine the Instant and the ZoneOffset to get an OffsetDateTime.
OffsetDateTime odt = OffsetDateTime.ofInstant ( instant , zoneOffset );
Dump to console.
System.out.println ( "inputMillis: " + inputMillis + " | instant: " + instant + " | zoneOffset: " + zoneOffset + " | odt: " + odt );
inputMillis: 1358157378910 | instant: 2013-01-14T09:56:18.910Z | zoneOffset: +01:00 | odt: 2013-01-14T10:56:18.910+01:00