Это похоже на старый вопрос, но я отвечу на него в любом случае, так как другие люди могут найти это.
В Joda есть класс для ISO 8601 форматов, поэтому вместо того, чтобы указать формат вручную, вы можете использовать этот класс следующим образом:
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
import org.joda.time.DateTime;
String strDate = "2012-07-04T15:00:00Z";
DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis();
DateTime endTime = formatter.parseDateTime(strDate);
long diff=endTime.getMillis();
С другой стороны, проблема, что вы, кажется, связанный с часовым поясом. Когда вы конвертируете назад из строки millis to date, она преобразуется с использованием местного часового пояса. Если вы хотите, чтобы получить дату в формате UTC, вы должны сделать следующее:
import org.joda.time.DateTimeZone;
import org.joda.time.DateTime;
DateTime dt = new DateTime(1341414000000).withZone(DateTimeZone.UTC);
Он вернется 2012-07-04T15: 00: 00.000Z, как и ожидалось. Если вы хотите отформатировать его без миллисекунд, вы можете использовать один и тот же форматировщик, как и раньше:
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
import org.joda.time.DateTime;
DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis();
DateTime dt = new DateTime(1341414000000).withZone(DateTimeZone.UTC);
formatter.print(dt)
И вернется 2012-07-04T15: 00: 00Z.
Где вы находились? С кем вы работаете? Скорее всего, синтаксический анализ происходит в вашем локальном, но конверсия возвращается в GMT или наоборот. –
Я в Индии, и я получаю от нас – Bytecode