Разный формат даты с разных устройств Android

Я заметил, что класс java.util.Date на Android дает разный формат даты для разных устройств, что доставляет мне много проблем при работе на разных устройствах. например, формат даты устройств Huawei — Mon Jan 01 00:00:00 GMT+02:00 2018, а формат Samsung — Mon Jan 01 00:00:00 SAST 2018. Но у меня нет других устройств для тестирования и получения разных форматов, поэтому мне было интересно, есть ли список различных форматов, которые мы могли бы получить с разных устройств, которых у меня нет. Или есть другой способ отформатировать эти даты, как эти

преобразовать java.util.Date в 19 Apr 2018

преобразовать java.util.Date в 2018-04-19

преобразовать java.util.Date в 2018-05-10 08:52:21

преобразовать 2018-05-10 08:52:21 в 08:52 10 May 2018


person Richard K Maleho    schedule 11.09.2018    source источник
comment
Попробуйте использовать невероятную библиотеку Jodatime   -  person Eenvincible    schedule 11.09.2018
comment
Формат даты и времени зависит от культуры используемого вами устройства. Плохой привычкой считается форсировать формат даты и выдавать один и тот же вывод для каждого устройства. Зачем вам нужны именно эти форматы для каждого устройства? (даже арабский или иврит, у которых совсем другая система)?   -  person Arthur Attout    schedule 11.09.2018
comment
@Eenvincible Я проверю эту библиотеку   -  person Richard K Maleho    schedule 11.09.2018
comment
Вы можете использовать java SimpleDateFormat для форматирования даты в соответствии с установленным вами шаблоном. В других случаях то, что вы получаете, зависит от текущей локали, на которую установлено устройство. Вы можете проверить этот учебник для примеров tutorials.jenkov.com/java -дата-время/   -  person Veselin Todorov    schedule 11.09.2018
comment
@ArthurAttout приложение, которое я разрабатываю, не будет глобальным и будет только на английском языке, те форматы, которые мне нужны, будут отображаться пользователю, а также будут сохранены в базе данных mysql, поэтому мне нужно, чтобы это было точно   -  person Richard K Maleho    schedule 11.09.2018
comment
@VeselinTodorov спасибо, я посмотрю на это   -  person Richard K Maleho    schedule 11.09.2018
comment
Должна быть возможность указать LOCALE   -  person Eenvincible    schedule 11.09.2018
comment
Просто конвертируйте дату в нужный формат. Используйте DateFormat/SimpleDateFormat   -  person grabarz121    schedule 11.09.2018
comment
Кстати, если вы сохраняете время в своей базе данных, используйте форматы даты и времени, которые поддерживаются вашей базой данных, или в секундах из эпохи UNIX, а не с форматированной строкой   -  person Arthur Attout    schedule 11.09.2018
comment
Однако Joda-Time является хорошим улучшением, если вы рассматриваете возможность использования внешней библиотеки для работы с датами и временем, я рекомендую java.time через библиотеку ThreeTenABP. java.time можно считать преемником Joda-Time. Joda-Time теперь находится в режиме обслуживания. Также @Envincible   -  person Ole V.V.    schedule 11.09.2018
comment
Часть, которая отличается, GMT+02:00 от SAST, - это настройка часового пояса JVM и, возможно, устройства. Это означает, что пользователь попросил представить дату в этом часовом поясе. Разве вы не должны уважать это? Если вы лучше знаете, в каком часовом поясе вы хотите представить время, вы должны, конечно, и это легко, когда вы знаете, как это сделать.   -  person Ole V.V.    schedule 11.09.2018
comment
@RichardKMaleho Я рекомендую вам сохранить формат, используемый для сохранения в базе данных, отдельно от формата, используемого для представления пользователю. Например, в MySQL используйте его типы данных date и datetime и не беспокойтесь о том, какой формат используется внутри.   -  person Ole V.V.    schedule 11.09.2018
comment
@ОлеВ.В. Я использую тип данных date в своей базе данных, поэтому я не могу сохранить его в формате, который дает java.util.Date. Я должен сначала преобразовать его в формат базы данных Date   -  person Richard K Maleho    schedule 11.09.2018
comment
@ОлеВ.В. мое приложение не используется для отображения текущего времени. Я использую даты, потому что пользователь сможет выбрать любую будущую дату, поэтому часовые пояса в этом случае не имеют значения.   -  person Richard K Maleho    schedule 11.09.2018
comment
Нет, не нужно. Если вы используете API уровня 26 или выше, используйте LocalDate для даты и лайк yourPreparedStatement.setObject(5, yourLocalDate), чтобы сохранить дату. Аналогично по дате и времени. На уровне 25 и ниже вам понадобятся старомодные java.sql.Date и yourPreparedStatement.setDate(5, yourJavaSqlDate), но это все же лучше, чем сохранение строки в столбце базы данных типа date.   -  person Ole V.V.    schedule 11.09.2018
comment
Для форматирования презентации мой ответ здесь может помочь вам начать работу, но, как я уже сказал, есть много других.   -  person Ole V.V.    schedule 11.09.2018