У меня проблема в формате java для ISO 8601, я использую этот код
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
//yyyy-MM-dd'T'HH:mm:ss.shh:mm
Date date = Calendar.getInstance().getTime();
String cDate = format.format(date);
Log.d("Date","Date is " + cDate);
Мой результат:
Date is 2019-04-03T04:37:52+0000
если я использую этот формат yyyy-MM-dd'T'HH:mm:ssZ. И результат:
Date is 2019-04-03T04:49:33.3304:49
если я использую этот формат yyyy-MM-dd'T'HH:mm:ss.shh:mm. Я пробовал свои решения, но не дал мне желаемого решения.
Мое желаемое решение 2008-09-15T15:53:00+05:00. Я пробую Offset, но он не работает для уровня API 23, он работает только для уровня API 28.




Вот маска формата, которую вы должны использовать:
yyyy-MM-dd'T'HH:mm:ssXXX
Из документация для SimpleDateFormat мы видим, что X представляет часовой пояс ISO 8601, который показывает часовой пояс в часах, сдвинутых от GMT.
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
format.setTimeZone(TimeZone.getTimeZone("Africa/Cairo"));
Date date = Calendar.getInstance().getTime();
String cDate = format.format(date);
System.out.println("Date is " + cDate);
Date is 2019-04-03T06:41:30+02:00
Обратите внимание, что мне нужно было назначить часовой пояс, отличный от GMT, потому что GMT просто возвращает Z для часового пояса.
Это работает в этой демонстрации Java. AFAIK Android работает на форке Java 7, поэтому я удивлен, что приведенный выше код у вас не работает.
Я только что проверил JavaDoc для Android SDF, и мой код должен работать.
Я тоже удивлен. :(
Я дал вам голос. Мой ответ может стать отправной точкой для кого-то, кто может вам помочь.
Тим, пожалуйста, проверьте это, я просто скопирую ваш код и вставлю в новую область, но вы можете посетить его ideone.com/I6HRGd, почему он показывает ошибку. Поскольку я не импортирую import java.text.*; В моем приложении для Android я использую import android.support.v7.app.AppCompatActivity; импортировать android.os.Bundle; импортировать java.text.SimpleDateFormat; импортировать java.util.Calendar; импортировать java.util.Date; импортировать java.util.TimeZone; муравей проблема с этим?
Вам не хватает импорта: import java.text.*;
Насколько я знаю, нет. Пакет java.text должен быть частью кода Android Java SDK. Вам просто нужен этот оператор import в исходном файле с использованием SimpleDateFormat.
На данный момент я не могу дать никакого другого совета, не сев перед вашей Android Studio (чего я, очевидно, не могу сделать). Возможно, кто-то другой сможет полностью решить вашу проблему.
В документации указано, что буква шаблона X для часовых поясов ISO-8601 поддерживается только на уровне API 24 и выше. OP пытается запустить это на уровне API 23.
@Michael Спасибо, что разъяснили это. Но в будущем большинство пользователей Android, вероятно, будут на уровне 24 или выше (я думаю).
Тим был прав, но данный шаблон работает для java, а не для той java, которая есть в андроиде. Для Android java используйте этот шаблон
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ");
Тогда выход будет
Date is 2019-04-03T08:29:27+00:00
Спасибо за редактирование моего вопроса и ваш уважаемый ответ, но приложение вылетает и показывает неизвестный символ шаблона «X».